Tag: static constructor

为什么不总是调用值types的构造函数

我有一个值types的types构造函数的问题。 这个问题的启发是杰弗里·里希特(Jeffrey Richter)通过C#第3版在CLR中写的东西,他说(在第195页 – 第8章)你永远不应该在值types中实际定义一个types构造函数,因为有时候CLR不会调用它。 所以,例如(实际上是Jeffrey Richters的例子),即使通过查看IL,我也无法解决这个问题,为什么在下面的代码中没有调用types构造函数: internal struct SomeValType { static SomeValType() { Console.WriteLine("This never gets displayed"); } public Int32 _x; } public sealed class Program { static void Main(string[] args) { SomeValType[] a = new SomeValType[10]; a[0]._x = 123; Console.WriteLine(a[0]._x); //Displays 123 } } 所以,为types构造函数应用下面的规则,我不明白为什么上面的值types构造函数根本不被调用。 我可以定义一个静态值types的构造函数来设置types的初始状态。 一个types只能有一个构造函数 – 没有默认构造函数。 types构造函数是隐式私有的 JIT编译器检查这个AppDomain中是否已经执行了types的types构造函数。 如果不是,则会将调用发送到本地代码,否则不会按照它知道该types已被“初始化”。 所以…我只是不能解决为什么我看不到这种types的数组正在构build。 […]