maf*_*afu 41 .net c# static-constructor
我想在不创建实例的情况下执行类的静态构造函数(即我想"加载"类).我怎么做?
加分问题:.NET 4和旧版本之间有什么区别吗?
编辑:
private static readonly
字段因此不能在方法中运行.Gar*_*ott 107
其他答案非常好,但是如果你需要强制一个类构造函数在没有引用类型(即反射)的情况下运行,你可以使用:
Type type = ...;
System.Runtime.CompilerServices.RuntimeHelpers.RunClassConstructor(type.TypeHandle);
Run Code Online (Sandbox Code Playgroud)
Fáb*_*sta 17
只需引用一个静态字段即可.这将强制您的静态初始化代码运行.例如:
public class MyClass
{
private static readonly int someStaticField;
static MyClass() => someStaticField = 1;
// any no-op method call accepting your object will do fine
public static void TouchMe() => GC.KeepAlive(someStaticField);
}
Run Code Online (Sandbox Code Playgroud)
用法:
// initialize statics
MyClass.TouchMe();
Run Code Online (Sandbox Code Playgroud)
您也可以这样做:
type.TypeInitializer.Invoke(null, null);
Run Code Online (Sandbox Code Playgroud)
发生以下任一情况时,将调用cctor(静态构造函数);
BeforeFieldInit
已设置)如果要显式调用cctor,并假设您有其他静态成员,则只需调用/访问它们即可。
如果您在cctor中没有做任何非常有趣的事情,编译器可能会决定对其进行标记BeforeFieldInit
,这将允许CLR选择尽早执行cctor的选项。此处对此进行了详细说明:http : //blogs.msdn.com/davidnotario/archive/2005/02/08/369593.aspx