靜態類是一個引用類型還是值類型? 如果任何一個給出了很好的解釋靜態類是引用類型還是值類型?
4
A
回答
14
類始終是引用類型不管它是靜態的還是非靜態的,將是很有益的。
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「創建」爲一個類型,所以它是一個真正的類引用類型。
但我喜歡把執行的或者說靜態類的「使用」爲空類型或「類名」而已,因爲這是它的成員是真正如何訪問和它如何執行。因此,將創建的靜態類視爲僅指向其方法和屬性的中空指針,而不是指向實際實例化的類對象的指針,該對象將這些東西包含爲真正的非靜態類。
相關問題
- 1. 確定類型是引用類型還是值類型
- 2. 動態 - 它是引用類型還是值類型?
- 3. 模板:靜態類型還是動態?
- 4. !ClrStack局部變量 - 它是值類型還是引用類型
- 5. 字符串是值類型還是引用類型?
- 6. 對象是引用類型還是值類型?
- 7. 是字符串值類型還是引用類型
- 8. 是列出值類型還是引用類型?
- 9. 模型的泛型超類應該是靜態還是單態?
- 10. 值類型字段是引用類型?
- 11. makeedge()返回的內存類型是靜態還是動態類型?
- 12. 如何確定T是泛型中的值類型還是引用類?
- 13. 虛擬方法是指動態還是靜態類型?
- 14. 球拍(和類型球拍)是強類型還是輕類型?
- 15. 自動在c + + 11是靜態類型或動態類型
- 16. 是可空類型的引用類型?
- 17. T是參數類型還是類類型?
- 18. WCF DataContracts應該是值還是引用類型?
- 19. 調度和繼承(靜態還是動態類型)
- 20. Haxe是強類型還是弱類型(或者兩者都是?)
- 21. 在Swift中是一個值類型或引用類型?
- 22. 數據集/數據表是值類型或引用類型
- 23. Groovy靜態泛型類型
- 24. Python靜態類型?
- 25. 確定一個類型是靜態
- 26. 在RPython中靜態類型是什麼?
- 27. 如何測試給定類型是否是靜態類?
- 28. SQLAlchemy模型變量是類還是對象類型?
- 29. Arraylist是類型安全還是強類型?
- 30. c#值類型和引用類型
最重要的是,靜態類是「既不在內存中」,因爲它不能被實例化,所以實際上不可能持有對它的引用。如果你不明智地擁有這種類型的變量,這一點實際上是沒有意義的。 – TomTom
靜態是一個C#的東西,CLR對靜態一無所知,並從CLR的角度來看,可以創建一個靜態類的實例。 – Steven