如何使用反射调用静态构造函数? [英] How do I invoke a static constructor with reflection?
本文介绍了如何使用反射调用静态构造函数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何获取静态构造函数的ConstructorInfo
?
How can I get the ConstructorInfo
for a static constructor?
public class MyClass
{
public static int SomeValue;
static MyClass()
{
SomeValue = 23;
}
}
我尝试了以下方法但失败了....
I've tried the following and failed....
Type myClass = typeof (MyClass);
// throws exception
myClass.TypeInitializer.Invoke(null);
// returns null (also tried deleting BindingFlags.Public
ConstructorInfo ci = myClass.GetConstructor(BindingFlags.Static|BindingFlags.Public, System.Type.DefaultBinder, System.Type.EmptyTypes, null);
// returns empty array
ConstructorInfo[] clutchingAtStraws = myClass.GetConstructors(BindingFlags.Static| BindingFlags.Public);
推荐答案
使用 myClass.TypeInitializer.Invoke(null, null)
.
我刚试过这个,效果很好.
I've just tried this and it worked fine.
我强烈建议您不要这样做,但是 - 它违反了期望静态构造函数只执行一次的类型.使用 RuntimeHelpers.RunClassConstructor
根据 Oliver 的回答,如果您只是想确保类已初始化.
I would strongly recommend that you don't do this, however - it violates a type expecting the static constructor to only be executed once. Use RuntimeHelpers.RunClassConstructor
as per Oliver's answer if you're just trying to ensure a class is initialized.
这篇关于如何使用反射调用静态构造函数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文