198得票2回答
为什么查找类型的初始化器会抛出NullReferenceException?

这让我感到困惑。我试图为 Noda Time 优化一些测试,其中包含一些类型初始化检查。我想找出一个类型是否拥有类型初始化程序(静态构造函数或带有初始化器的静态变量),然后再将其加载到新的AppDomain 中。令我惊讶的是,对此进行了简单的测试后会抛出NullReferenceExcepti...

38得票7回答
为什么CLR不总是调用值类型构造函数?

我有一个关于值类型中的类型构造函数的问题。这个问题是受 Jeffrey Richter 在《CLR via C# 第三版》中写的一些东西启发的,他在第8章的第195页上说,你不应该在值类型中实际定义类型构造函数,因为有时候CLR不会调用它。 例如(好吧...实际上是Jeffrey Richt...

16得票1回答
构造函数中的Try/catch块

在构造函数内部使用try/catch块是一种不好的编程实践吗?或者只要我们的程序能够优雅地处理TypeInitializer异常,这是否没有什么区别呢? 在C#中,如果构造函数内部有任何异常,框架总是会抛出TypeInitializer异常。 谢谢, Shamika

12得票2回答
强制类加载

在C#或者.NET IL中,有没有一种方法可以强制一个具有类型初始化程序(静态构造函数)的类加载自身,而不需要访问它的任何参数? 假设我已经拥有这个类:public static class LogInitialization { static LogInitialization() ...

7得票2回答
如何显式运行未知类型的静态构造函数?

可能是重复问题: 如何使用反射调用静态构造函数? 在不同类的静态构造函数中有一些初始化代码。我不能创建实例,也不知道提前知道类型。我想确保这些类已被加载。 我尝试了这个: fooType.TypeInitializer.Invoke (new object[0]); 但是遇到了...

7得票1回答
在ECMA规范术语中,像GetField和GetValue这样的反射方法执行的是“引用”还是“访问”?

我真正想知道的是哪些反射方法会触发类型初始化?这对我来说有点不清楚。具体来说,如果应用于静态字段,那么所提到的两种方法GetField和GetValue是否会触发类型初始化?我已经尝试研究了这个问题,据我所知,执行诸如引用或访问静态字段等操作将触发所有静态字段的类型初始化。下面我引用了我认为相...