2012-07-02 72 views

回答

14

類始終是引用類型不管它是靜態的還是非靜態的,將是很有益的。

+5

最重要的是,靜態類是「既不在內存中」,因爲它不能被實例化,所以實際上不可能持有對它的引用。如果你不明智地擁有這種類型的變量,這一點實際上是沒有意義的。 – TomTom

+2

靜態是一個C#的東西,CLR對靜態一無所知,並從CLR的角度來看,可以創建一個靜態類的實例。 – Steven

1

我想你指的是靜態類成員的..他們是reference類型,如果他們實際上是對象,否則它們僅僅是值類型。如我所知,一個靜態類inself不能被傳遞。 嘗試運行這段代碼

class Program 
    { 
     static void Main(string[] args) 
     { 
      StaticClass.x = 89; 
      Console.WriteLine(StaticClass.x); 
      changeValue(StaticClass.x); 
      Console.WriteLine(StaticClass.x); 
      Console.ReadKey(); 
     } 
     static void changeValue(int x) 
     { 
      x = x + 1; 
     } 
    } 
{ 
    public static class StaticClass 
    { 
     public static int x { get; set; } 
    } 
} 

編輯: -
輸出89在兩種情況下
編輯: -
仍然如果你挖得深的一個靜態類,基本上是一個私人類構造函數和沒有狀態(變量)與它相關聯(不像我提供的例子)。 所以是在理論上是一個reference

0

是的,當你的方法中改變StaticClass.Property值靜態類被認爲是引用類型的,這種變化將會逐漸到處都引用此類。它只有一個內存地址,不能被複制,所以當另一個方法或屬性調用會發生時,這個新值將勝過舊的值。

1

值和引用類型是關於類型的實例。靜態類不能被實例化,因此這個問題與靜態類無關。

靜態類只能包含靜態成員和靜態成員(如屬性)爲整個應用程序創建一次,所以如果你改變它的價值,它在你的應用程序改變無處不在。

0

我只想添加一個靜態類既是一個類又是一個類型。靜態構造函數被調用一次,因此當程序中第一次被「引用」時,它被CLR「創建」爲一個類型,所以它是一個真正的類引用類型。

但我喜歡把執行的或者說靜態類的「使用」爲空類型或「類名」而已,因爲這是它的成員是真正如何訪問和它如何執行。因此,將創建的靜態類視爲僅指向其方法和屬性的中空指針,而不是指向實際實例化的類對象的指針,該對象將這些東西包含爲真正的非靜態類。