nuc*_*eet 4 .net c# inheritance static constructor
我通过C#阅读了Jeffrey Richter - CLR,并决定制作一些测试应用程序.我需要一些帮助来了解究竟发生了什么以及为什么.是的,我知道,公共财产是个坏主意,但我的问题不是代码风格.所以:
class ClassA
{
public static int val1;
static ClassA
{
val1 = 10;
}
}
class ClassB : ClassA
{
public static int val2;
static ClassB
{
val1 = 15;
}
}
Run Code Online (Sandbox Code Playgroud)
现在我们按顺序调用输出到控制台:
Console.WriteLine(ClassB.val1);
Console.WriteLine(ClassB.val2);
Console.WriteLine(ClassB.val1);
Run Code Online (Sandbox Code Playgroud)
输出是:
10
0
15
Run Code Online (Sandbox Code Playgroud)
所以,据我所知,编译器会static ctor在第一次使用该类型的静态成员时进行调用.在使用之前.那么,为什么它叫static ctor的ClassB在第一行不?这都是因为静态成员没有继承,所以它只是在第一行调用基类型?解释一下.谢谢.
因为第一个调用将在内部转换Console.WriteLine(ClassA.val1);为调用首先应该是什么样子.能够打电话ClassB.val1只是方便编译器方面.该val1字段仅与运行时方相关ClassA并且与ClassB运行方无关.