我知道,靜態構造函數總是優先,並在任何實例構造函數之前被調用。然而,考慮一下我有一個實例類和一個靜態類的場景。我想知道爲什麼結果是首先從基類和靜態類?我也驗證了交換呼叫,我相應地得到了結果。但是我錯在我的想法中:靜態類總是應該首先被調用,而不管其他實例類是什麼?爲什麼這引發我是因爲,我看到某個地方,當包含該類的命名空間被觸發時,靜態類會自動加載。然後,我期望靜態構造函數首先觸發。爲什麼不發生?有人能以一種可以理解和簡單的方式解釋嗎?靜態類不會先被調用,而會被實例類調用。爲什麼?
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();
}
你在哪裏閱讀當包含該類的命名空間被觸發時,靜態類會自動加載? – Paparazzi 2013-02-13 13:16:23
「我在某處看到,當包含該類的命名空間被觸發時,靜態類會自動加載。」你如何「觸發」命名空間?這根本不符合邏輯。請發佈一個鏈接到神祕的「某處」,但不清楚它們的含義。 – dasblinkenlight 2013-02-13 13:17:46
嗨Blam和dasb,對不起,如果我誤解了,但你可以在MSDN中看到類似的聲明http://msdn.microsoft.com/en-us/library/79b3xss3(v=vs.80).aspx – Learner 2013-02-13 13:19:23