簡體   English   中英

C# 中的所有引用類型都是類類型嗎?

[英]Are all reference types class types in C#?

C# 中是否有任何不是類的引用類型? 以下泛型中的約束是否包括所有引用類型?

static void f<T>() where T : class
{
    T t = default;
    Console.WriteLine(t);
}

你在問兩個不同的問題

C# 中的所有引用類型都是類類型嗎?

以下泛型 [ where T : class ] 中的約束是否包括所有引用類型?

是的,它將限制所有引用類型


首先,讓我們確定引用類型實際上是什么。

引用類型(C# 參考)

C#中有兩種類型:引用類型值類型 引用類型的變量存儲對其數據(對象)的引用,而值類型的變量直接包含其數據。

以下關鍵字用於聲明引用類型:

  • 班級

  • 界面

  • 代表

C# 還提供了以下內置引用類型:

  • 動態的

  • 目的

  • 細繩

注意:上面沒有提到, Array類型也是從abstract基類型Array派生的引用類型

其次,讓我們弄清楚類約束約束了什么

類型參數的約束(C# 編程指南)

where T : class

類型參數必須是引用類型。 此約束也適用於任何接口委托數組類型

注意:上面沒有提到, class約束還包括dynamic


作為一個額外的事實,從C# 7.3 開始,您還可以通過委托顯式約束

委托約束

同樣從C# 7.3開始,您可以使用System.DelegateSystem.MulticastDelegate作為基類約束。 CLR 始終允許此約束,但 C# 語言不允許它

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM