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

san*_*ngh 6 c# generics

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

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

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

public class Derived<T>
        where T : Base
{
    public Derived() { }
}
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 10

因为那时通用没有任何意义.T只有Base,所以你还不如让一个非泛型类型开始.

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

  • 当然,通过类似的逻辑,你不能使用"对象"作为约束,出于相反的原因; T已经可以转换为对象,因为只有可转换为对象的类型可以用作类型参数,因此约束将是多余的. (5认同)