为什么密封类不允许是泛型类型约束?

时间:2010-12-10 07:55:04

标签: c# generics

我只是想知道为什么不允许密封类是泛型类型约束?

假设我在c#中有一个简单的代码片段,如下所示

 public sealed class Base
{
    public Base() { }
}

public class Derived<T>
        where T : Base
{
    public Derived() { }
}

当我实例化Derivedclass时,我得到'Base'不是有效的约束。用作约束的类型必须是接口,非密封类或类型参数。

4 个答案:

答案 0 :(得分:10)

因为那时通用没有任何意义。 T只能 Base,因此您可以将其作为非泛型类型开始。

为什么想要 Derived在这里是通用的?你为什么想要一个名为Base的类型(暗示它应该是一个基本类型)要密封?

答案 1 :(得分:2)

因为T永远不会有子课!没有必要拥有这种通用。

答案 2 :(得分:1)

如果只有一个类,那么编译器不想经历制作通用的麻烦。请注意,如果将密封类作为类型参数传递,则可以使用密封类作为通用约束。例如,如果有一个类

Class Foo(Of T, U As T)

可以创建该类的实例,其中两个泛型类型参数都是相同的密封类型,因为还可以创建类型参数引用不同类型的实例。

答案 3 :(得分:0)

T除了Base之外别无其他。那么,是什么让它成为Generic?