嵌套泛型,同时支持继承

时间:2017-03-03 00:25:33

标签: c# generics inheritance

所以我有一个我正在使用的容器类型通用对象,如下所示:

public class Property<T>
{
    T Value { get; set; }
}

我希望能够做不同泛型类型的属性列表,所以我这样做了:

public class Property
{
    object BaseValue { get; set; }
}
public class Property<T> : Property
{
    T Value { get; set; }
}

List<Property> properties = new List<Property>();

(未显示BaseValueValue都指向同一个对象,它们将始终相同)。所以现在我可以拥有不同类型属性的集合。我现在遇到的问题涉及继承约束。说我有以下课程:

public abstract class Base { }
public class A : Base { }
public class B : Base { }
public class C { }

我希望能够有一个泛型类型Property类来限制其中的类型,并且可以用作其他泛型的泛型参数。基本上是:

public List<Property<Base>> baseList = new List<Property<Base>>();
baseList.Add(new Property<A>()) //Works
baseList.Add(new Property<B>()) //Works
baseList.Add(new Property<C>()) //Won't work

但是这不起作用,因为即使A继承自BaseProperty<A>也不会继承Property<Base>

有没有办法重组这些类以允许这种类型的约束?我目前的想法是创建一个新课程:

public class PropertyBase<T> : Property<T> where T : Base { }

使用它,但是1)我不确定它是否会起作用,2)即使它确实如此,它也会创建多个功能相同但类型不同的类(Property<A>和{{ 1}}在功能上几乎相同,但是不同的类型。)

0 个答案:

没有答案