考虑这个示例代码:
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
是null。然而,将Main
方法更改为以下内容:
public static void Main() {
new B();
Console.WriteLine(B.TheT);
}
TheT
是“Test”,这是预期的结果。我可以理解这会强制运行静态构造函数,但为什么第一种情况不会发生呢?
我尝试阅读规范,并注意到以下内容(§10.12):
[...] 静态构造函数的执行由应用程序域中发生的以下事件中的第一个触发:
• [...]
• 引用类类型的任何静态成员。
我的理解是,由于TheT
不是B
的成员,因此不会强制运行B
的静态构造函数。这正确吗?
如果是这样的话,我该如何最好地让B
指定如何初始化TheT
?