2013-12-17 136 views
-4

考慮以下代碼:爲什麼不調用主類中的默認構造函數?

class Program 
{ 
    static void Main(string[] args) 
    { 
    }  
    public Program() 
    { 
     DoSomthing(); 
    } 
} 

的構造並不call.?Why? 爲什麼構造函數應該調用? 誰從課堂上創建實例?

+1

很好的面試問題。 –

+1

我很抱歉,但我不認爲這是個好問題。他問_why構造函數沒有調用_但他甚至沒有說_why構造函數應該調用_?他可以通過查看幾個MSDN頁面在30秒內找到答案。我真的很驚訝這個問題現在得到7 upvotes .. –

+0

@SonerGönül你可以關閉這個問題。 –

回答

13

因爲您沒有創建實例。只有在創建每個實例時才調用構造函數。 Main()是一個static方法 - 不需要實例即可調用該方法。

你可以使用一個靜態構造函數(又名類型初始化):

static Program() 
{ 
    DoSomething(); 
} 
  • 但我會建議先重新思考設計的。
+0

靜態構造函數是分離出在成員初始化中無法完成的init的好方法。例如,將命令行params解碼爲標誌。 – Gusdor

+0

@古斯多我不同意;解碼命令行參數可以通過'Main'完成。調用靜態構造函數的確切時機非常複雜,並且具有足夠的邊界情況,當您不期望它們時會導致問題 –

+0

_只有在創建每個instance_時才調用構造函數_:static concstructoes也會在調用時調用靜態字段被訪問或被訪問(beforefieldinit)...沒有任何實例。 –

相關問題