【发布时间】:2019-01-17 14:55:00
【问题描述】:
我有一个基类MessageBase
public abstract class MessageBase {}
Message1D 和 Message2D 继承自 MessageBase
public class Message1D : MessageBase {}
public class Message2D : MessageBase {}
我还有一个泛型类Foo,其泛型参数类型为MessageBase
public abstract class Foo<T> where T : MessageBase {}
还有两个类Bar和Baz:
public class Bar : Foo<Message1D> {}
public class Baz : Foo<Message2D> {}
我的问题就在这里:
public class Network
{
private List<Foo<MessageBase>> messages = new List<Foo<MessageBase>>();
public void AddBar()
{
messages.Add(new Bar()); //can not add
}
public void AddBaz()
{
messages.Add(new Baz()); //can not add
}
}
由于 Bar 和 Baz 继承自 Foo<T> 并且 T 的类型为 MessageBase 我希望我应该能够将 Bar 和 Baz 实例添加到列表中,但是我不能到期到:
无法从
Bar转换为Foo<MessageBase>
和
无法从
Baz转换为Foo<MessageBase>
我想将Bar 和Baz 实例添加到列表中。我该怎么做?
【问题讨论】:
-
你有什么问题?
-
@vasily.sib 我想将 Bar 和 Baz 实例添加到列表中。我该怎么做?
-
Foo<Message1D>不是从Foo<MessageBase>继承的,所以你现在不能。您可以向Foo<Message1D>和Foo<Message2D>添加一些通用接口,并更改messages列表的定义。
标签: c# list generics inheritance