我只是想知道为什么不允许密封类是泛型类型约束?
假设我在c#中有一个简单的代码片段,如下所示
public sealed class Base
{
public Base() { }
}
public class Derived<T>
where T : Base
{
public Derived() { }
}
当我实例化Derivedclass时,我得到'Base'不是有效的约束。用作约束的类型必须是接口,非密封类或类型参数。
答案 0 :(得分:10)
因为那时通用没有任何意义。 T
只能 Base
,因此您可以将其作为非泛型类型开始。
为什么想要 Derived
在这里是通用的?你为什么想要一个名为Base
的类型(暗示它应该是一个基本类型)要密封?
答案 1 :(得分:2)
因为T永远不会有子课!没有必要拥有这种通用。
答案 2 :(得分:1)
如果只有一个类,那么编译器不想经历制作通用的麻烦。请注意,如果将密封类作为类型参数传递,则可以使用密封类作为通用约束。例如,如果有一个类
Class Foo(Of T, U As T)
可以创建该类的实例,其中两个泛型类型参数都是相同的密封类型,因为还可以创建类型参数引用不同类型的实例。
答案 3 :(得分:0)
T
除了Base
之外别无其他。那么,是什么让它成为Generic?