[英]Why sealed classes are not allowed to be generic type constraints?
我只是想知道為什么密封類不允許是泛型類型約束?
假設我在c#中有一個簡單的代碼片段,如下所示
public sealed class Base
{
public Base() { }
}
public class Derived<T>
where T : Base
{
public Derived() { }
}
當我實例化Derivedclass時,我得到'Base'不是一個有效的約束。 用作約束的類型必須是接口,非密封類或類型參數。
因為那時通用沒有任何意義。 T
只能是Base
,因此您可以將其作為非泛型類型開始。
為什么你希望 Derived
在這里是通用的? 為什么你會想要一個名為類型Base
(這意味着它應該是一個基本類型)被封了?
因為T永遠不會有子課! 沒有必要擁有這種通用。
如果只有一個類,那么編譯器不想經歷制作通用的麻煩。 請注意,如果將密封類作為類型參數傳遞,則可以使用密封類作為通用約束。 例如,如果有一個班級
Class Foo(Of T, U As T)
可以創建該類的實例,其中兩個泛型類型參數都是相同的密封類型,因為還可以創建類型參數引用不同類型的實例。
T
不能是別的什么,只是Base
。 那么,是什么讓它成為Generic?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.