【发布时间】:2013-02-13 13:08:33
【问题描述】:
我知道,静态构造函数总是优先并在任何实例构造函数之前被首先调用。但是考虑一下我有一个实例类和一个静态类的情况。我想知道为什么结果首先来自基类,然后是静态类?我也验证了交换调用,我得到了相应的结果。但是我的想法是错误的吗,无论任何其他实例类如何,都应该首先调用静态类?为什么向我提出这个问题是因为,我在某处看到,当触发包含该类的命名空间时,会自动加载静态类。然后我希望该静态构造函数首先触发。为什么没有发生呢?有人可以以易于理解和简单的方式解释。
public class Base
{
public Base() { Console.WriteLine(" I am from normal Base constructor"); }
static Base() { Console.WriteLine("Hey I am from Static Base"); }
}
public static class Base1
{
static Base1() { Console.WriteLine("I am from Static Constructor"); }
public static void StaticMethod() { Console.WriteLine("I am from Static Method"); }
}
static void Main(string[] args)
{
Base b = new Base();
Base1.StaticMethod();
Console.Read();
}
【问题讨论】:
-
你在哪里读到静态类是在触发包含该类的命名空间时自动加载的?
-
“我在某处看到,当触发包含该类的命名空间时,会自动加载静态类。”你如何“触发”一个命名空间?这根本不符合逻辑。请张贴神秘“某处”的链接,不清楚它们的意思。
-
嗨 Blam 和 dasb,如果我误解了,请见谅,但您可以在 MSDN msdn.microsoft.com/en-us/library/79b3xss3(v=vs.80).aspx 中看到类似的声明
-
该链接确实显示“当加载包含该类的程序或命名空间时,.NET Framework 公共语言运行时 (CLR) 会自动加载静态类。”
-
嗯,是的。老实说,我还是不明白这个说法。我理解下面有人解释的方式,但我很难理解 MSDN 在上述声明中试图传达的内容。