2010-09-02 62 views
2

考慮下面的代碼:你可以在自己的入口點實例化一個類嗎?

class Program 
{ 

    static void Main(string[] args) 
    { 
     new Program().Run(args); 
    } 

    void Run(string[] args) 
    { 
     ... 
    } 

    ... 
} 

現在這個工程,我期望它,當然我也看不出什麼明顯的錯誤,但本能的代碼讓我擔心。所以我有三個問題:

  • 此行爲是否由編譯器定義好?
  • 這段代碼是否符合我的期望?
  • 此代碼是否符合最佳實踐?
+0

你在做什麼絕對沒有錯。靜態方法始終創建周圍類的實例(例如,請參閱單例模式)。 – 2010-09-02 18:14:16

回答

3

是的,這是有效的代碼,並做你期望它做的。

主要只是一個靜態方法。它是入口點的事實,僅僅意味着CLR在啓動時調用它。在靜態方法中實例化一個類並調用其中的方法是完全有效的。

+0

是的,它只是另一種方法。它的唯一特別之處在於它在啓動時被調用一次。在稍後再次調用該方法時,不會對其他靜態方法做任何不同的處理,所以不用擔心。 – JonWillis 2010-09-02 18:19:11

1

是的,是的,是的。我不明白爲什麼它會麻煩任何人。

Main()這樣的入口點與構造函數不同,再加上它是靜態的。運行時,類已完全定義,所有靜態成員都可用,並且可以創建實例而沒有任何問題。

相關問題