所以我有一个我正在使用的容器类型通用对象,如下所示:
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>();
(未显示BaseValue
和Value
都指向同一个对象,它们将始终相同)。所以现在我可以拥有不同类型属性的集合。我现在遇到的问题涉及继承约束。说我有以下课程:
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
继承自Base
,Property<A>
也不会继承Property<Base>
。
有没有办法重组这些类以允许这种类型的约束?我目前的想法是创建一个新课程:
public class PropertyBase<T> : Property<T> where T : Base { }
使用它,但是1)我不确定它是否会起作用,2)即使它确实如此,它也会创建多个功能相同但类型不同的类(Property<A>
和{{ 1}}在功能上几乎相同,但是不同的类型。)