Python for .NET:如何通过反射调用静态类的方法?
如何在Python中调用C#静态类的方法?
你之前调用普通类方法的思路没问题,但静态类本身不能被实例化,所以实例化那一套流程不仅没必要,还会导致问题。要调用静态类的方法,直接通过类的Type对象调用静态方法即可,不需要创建实例。
正确的调用步骤:
- 先加载目标程序集,和之前一样用
clr.AddReference - 获取静态类的
Type对象 - 调用
Invoke方法时,第一个参数传入None(对应C#的null),因为静态方法不需要实例对象
完整代码示例:
import clr # 加载目标程序集 clr.AddReference('c:\\Test\\Module.dll') from System import Type # 获取静态类的Type对象 static_class_type = Type.GetType('SomeNamespace.SomeClass') # 获取目标静态方法的MethodInfo对象 static_method = static_class_type.GetMethod('SomeMethod') # 调用静态方法:第一个参数传None(无需实例),第二个参数是方法所需的参数列表 result = static_method.Invoke(None, []) print(result)
为什么之前的方法行不通?
- C#的静态类是密封的且不包含实例构造函数,所以你调用
type1.GetConstructor(Type.EmptyTypes)会返回null,后续的实例化步骤自然会报错。 - 静态方法属于类本身,不属于任何实例,所以直接通过类的Type对象调用即可。
如果你的静态方法需要传入参数,只需要在Invoke的第二个参数列表里填入对应的值就行,比如static_method.Invoke(None, [3.14, "demo"])。
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

