我正在尝试找到将泛型接口的泛型列表用作变量的正确方法。
下面是一个例子。这可能不是最好的,但希望你能明白:
public interface IPrimitive<T>
{
T Value { get; }
}
然后在另一个类中,我希望能够声明一个变量,该变量包含为任意T
实现IPrimitive<T>
的对象列表。
// I know this line will not compile because I do not define T
List<IPrimitive<T>> primitives = new List<IPrimitives<T>>;
primitives.Add(new Star()); // Assuming Star implements IPrimitive<X>
primitives.Add(new Sun()); // Assuming Sun implements IPrimitive<Y>
请注意,对于列表中的每个条目,IPrimitive<T>
中的T
可能不同。
关于如何建立这样的关系有什么想法吗?另一种方法?
发布于 2010-12-24 05:28:59
public interface IPrimitive
{
}
public interface IPrimitive<T> : IPrimitive
{
T Value { get; }
}
public class Star : IPrimitive<T> //must declare T here
{
}
那么你应该能够拥有
List<IPrimitive> primitives = new List<IPrimitive>;
primitives.Add(new Star()); // Assuming Star implements IPrimitive
primitives.Add(new Sun()); // Assuming Sun implements IPrimitive
发布于 2010-12-24 05:29:03
我还可以建议(如果您使用的是C# 4)使您的界面协变吗?
public interface IPrimitive<out T>
{
T Value { get; }
}
当你需要从列表中取出一些东西时,这可以为你省去一些麻烦。
发布于 2010-12-24 05:27:15
你说它不会工作,因为你没有定义T
。所以给它下定义:
public class Holder<T>
{
public List<IPrimitive<T>> Primitives {get;set;}
}
https://stackoverflow.com/questions/4522580
复制相似问题