考虑这个示例代码:
public class A<T>
{
public static T TheT { get; set; }
}
public class B : A<string>
{
static B() {
TheT = "Test";
}
}
public class Program {
public static void Main(String[] args) {
Console.WriteLine(B.TheT);
}
}
这里B.TheT
是空的。但是,像这样更改Main
方法:
public static void Main() {
new B();
Console.WriteLine(B.TheT);
}
B.TheT
正如预期的那样,是“测试”。我可以理解这会强制静态构造函数运行,但为什么在第一种情况下不会发生这种情况?
我尝试阅读规范,这引起了我的注意(§10.12):
[...] 静态构造函数的执行由在应用程序域中发生的以下事件中的第一个触发:
• [...]
• 引用类类型的任何静态成员。
我对此的解释是,由于TheT
不是 的成员,因此不会强制运行B
的静态构造函数。B
它是否正确?
如果这是正确的,我将如何最好B
地指定如何初始化TheT
?