繁体   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