不能从基类继承

本文关键字:继承 基类 不能 | 更新日期: 2024-08-02 00:00:35

我的代码如下

class BaseClass<T> where T : class
{
    class DerivedClass<U, V>
        where U : class
        where V : U
    {
        BaseClass<V> _base;
    }
}

错误:类型"V"必须是引用类型。

这里的"V"不是类型类吗??

不能从基类继承

您可以通过向V类型参数添加class约束来解决此问题:

class BaseClass<T> where T : class
{
    class DerivedClass<U, V>
        where U : class
        where V : class, U
    {
        BaseClass<V> _base;
    }
}

有关解释,请参阅Eric Lippert的文章(如Willem van Rumpt在上文中所评论的)。

这里的"V"不是类型类吗??

不,不是。V可以是System.ValueType或任何枚举或任何ValueType

您的约束只是说V应该从U派生,其中U是类。它没有说V应该是一个类。

例如,以下内容完全有效,这与约束条件where T : class相矛盾。

DerivedClass<object, DateTimeKind> derived;

因此,您还需要添加where V : class

埃里克·利珀特在博客上也提出了同样的问题。