首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >强制类加载

强制类加载
EN

Stack Overflow用户
提问于 2010-11-15 13:12:28
回答 2查看 3.3K关注 0票数 12

在C#或.net IL中,有没有一种方法可以强制具有类型初始化器(静态构造函数)的类在不访问其任何参数的情况下加载自身?

假设我有这门课

代码语言:javascript
复制
public static class LogInitialization {
    static LogInitialization() {
        System.Console.WriteLine("Initialized");
    }
}

有没有办法把这一行打印出来?

注意,这个类是静态的,所以我不能实例化它来强制初始化,而且它没有公共成员,所以我不能访问它们来启动它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-15 13:33:38

在CLI规范中,我找到了对RuntimeHelpers.RunClassConstructor方法的引用

如果一种语言希望提供更严格的行为-例如,类型初始化以从上到下的顺序自动触发基类的初始化器的执行-那么它可以通过以下两种方式之一来实现:

  • 在每个类构造函数中定义隐藏的静态字段和代码,这些类构造函数触及其基类和/或其实现的接口的隐藏静态字段,或者通过显式调用System.Runtime.CompilerServices.RuntimeHelpers.RunClassConstructor (请参阅分区IV)来定义
票数 13
EN

Stack Overflow用户

发布于 2010-11-15 13:20:57

我通常在具有静态构造函数的类上创建一个伪(空) Init方法,以强制执行静态构造函数。即。

代码语言:javascript
复制
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你想要实现什么?

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4181582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档