在C#或.net IL中,有没有一种方法可以强制具有类型初始化器(静态构造函数)的类在不访问其任何参数的情况下加载自身?
假设我有这门课
public static class LogInitialization {
static LogInitialization() {
System.Console.WriteLine("Initialized");
}
}有没有办法把这一行打印出来?
注意,这个类是静态的,所以我不能实例化它来强制初始化,而且它没有公共成员,所以我不能访问它们来启动它。
发布于 2010-11-15 13:33:38
在CLI规范中,我找到了对RuntimeHelpers.RunClassConstructor方法的引用
如果一种语言希望提供更严格的行为-例如,类型初始化以从上到下的顺序自动触发基类的初始化器的执行-那么它可以通过以下两种方式之一来实现:
System.Runtime.CompilerServices.RuntimeHelpers.RunClassConstructor (请参阅分区IV)来定义发布于 2010-11-15 13:20:57
我通常在具有静态构造函数的类上创建一个伪(空) Init方法,以强制执行静态构造函数。即。
public static void Initialize()
{
// this will force your static constructor to execute, obviously
}也就是说,你总是可以使用带有反射的Type.TypeInitializer ...http://msdn.microsoft.com/en-us/library/system.type.typeinitializer.aspx
编辑:我以前做过的另一件事是创建一个名为RequiresInitializationAttribute的属性,然后在AssemblyLoad上扫描具有此类属性的程序集的类型,并在加载包含程序集时使用type.TypeInitializer强制执行静态构造函数。
像往常一样,我想真正的问题是,is...what你想要实现什么?
https://stackoverflow.com/questions/4181582
复制相似问题