2009-05-05 162 views
7

實例類的靜態成員是否只與實例本身一樣存在,或者靜態成員是否在整個應用程序的整個生命週期中都存在?例如,假設我有一個Hashtable作爲一個靜態屬性。如果我從一個「實例」向它添加項目,它們是否可以從另一個「實例」獲得?實例類的靜態成員

回答

16

他們住在AppDomain的整個生命週期中。 (對於Windows應用程序,這通常是過程的整個生命週期,但可能並不是這樣,具體取決於您在做什麼,AppDomains會在ASP.NET中定期回收。)

不要將靜態變量視爲在實例之間共享 - 將它們視爲屬於類型而不是任何特定實例。當您有時從未創建任何實例時,這可以更容易理解事情的工作方式。

例如:

class Test 
{ 
    static int x = 0; 

    static void Main() 
    { 
     x = 10; 
     Console.WriteLine(x); 
    } 
} 

有沒有實例圍繞「共享」 Test.x - 不過沒關係,因爲它與類型Test相關,而不是與實例Test

你可能會認爲這是一個非常微妙的區別,但它是我發現有用的。

+0

我傾向於將其與「與所有實例共享的類型_and_」關聯起來。 – 2009-05-05 19:39:21