簡體   English   中英

為什么密封類不允許是泛型類型約束?

[英]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.

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