通用接口的通用列表是不允许的,任何替代方法?
我试图找到使用通用接口通用列表作为变量的正确方法。
这是一个例子。 它可能不是最好的,但希望你能明白这一点:
public interface IPrimitive { T Value { get; } }
然后在另一个类中,我希望能够声明一个变量,该变量包含对任意T
实现IPrimitive
的对象列表。
// I know this line will not compile because I do not define T List<IPrimitive> primitives = new List<IPrimitives>; primitives.Add(new Star()); // Assuming Star implements IPrimitive primitives.Add(new Sun()); // Assuming Sun implements IPrimitive
请注意,对于列表中的每个条目, IPrimitive
可能不同。
关于如何建立这种关系的任何想法? 替代方法?
public interface IPrimitive { } public interface IPrimitive : IPrimitive { T Value { get; } } public class Star : IPrimitive //must declare T here { }
然后你应该能够拥有
List primitives = new List ; primitives.Add(new Star()); // Assuming Star implements IPrimitive primitives.Add(new Sun()); // Assuming Sun implements IPrimitive
约翰是对的。
我是否也建议(如果你使用的是C#4)你使界面协变?
public interface IPrimitive { T Value { get; } }
当您需要从列表中取出内容时,这可以为您节省一些麻烦。
你说它不会起作用,因为你没有定义T
所以定义它:
public class Holder { public List> Primitives {get;set;} }