c# - 如何使用反射调用静态构造函数?

标签 c# reflection

如何获取静态构造函数的 ConstructorInfo

public class MyClass 
{
    public static int SomeValue;

    static MyClass() 
    {
        SomeValue = 23;
    }
}

我尝试了以下但失败了......

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);

最佳答案

还有System.Runtime.CompilerServices.RuntimeHelpers.RunClassConstructor(RuntimeTypeHandle type) ,它还保证静态构造函数只被调用一次,而不管该方法被调用了多少次:

Type myClass = typeof(MyClass);
System.Runtime.CompilerServices.RuntimeHelpers.RunClassConstructor(myClass.TypeHandle);

Reference

关于c# - 如何使用反射调用静态构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2524906/

相关文章:

c# - 如何取消选中 WPF (MVVM) 中的单选按钮

c# - 如何使用位置用户名或 ID 获取在特定位置的 Instagram 中上传照片的所有用户?

java - 使用枚举和反射来调用类列表上的方法

c# - 来自 List<Row> 的数据表

Java:通过反射多次访问同步方法?

c# - 在 WPF ControlTemplate 中查找控件

c# - LINQ To SQL 会在调用 SubmitChanges 后自动更新 LOCAL/CLIENT id 列吗?

c# - LINQ to SQL (CE) 速度与 SqlCe

c# - 什么表现更差 : Reflection or Boxing?

c# - 不使用反射无法降低工厂方法中的圈复杂度