如何使用反射调用静态构造函数? [英] How do I invoke a static constructor with reflection?

查看:23
本文介绍了如何使用反射调用静态构造函数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何获取静态构造函数的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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆