【发布时间】:2016-07-03 14:06:21
【问题描述】:
我正在尝试将对象添加到列表中,其中对象是继承接口的泛型。
监听器基类:
public class Listener<T> : IListener<T>
where T : ICaller {
public Listener() {
}
public Type GetCallerType() {
return typeof(T);
}
public virtual void Received(Connection connection, T obj) {}
}
监听器示例:
public class ClientPacketListener<T> : Listener<T>
where T : Packet {
}
我想将它们添加到此列表中:
Listener<ICaller> listeners = new Listener<ICaller>();
在这种情况下,Packet 继承了 ICaller,因此所有内容都应该能够转换为基本类型。错误是它不能被强制转换。
我查看了其他一些问题,但它们仅适用于 <T> 的泛型,而不适用于侦听器类。有没有办法让它工作?
【问题讨论】:
-
Listener<T>和ClientPacketListener<T>都没有实现ICaller。请说明你想在这里做什么以及你希望它如何表现。 -
T 实现 ICaller(在这种情况下为数据包)。我想创建一个可以循环的通用列表,但是除了给定的 T 类型之外,类类型应该是通用的。
-
你是说
Listener<ICaller> listener = new ClientPacketListener<Packet>(); -
你能改一下
IListener<T>代码吗? -
嗯,这就是我想要做的,但不知何故不起作用,我不知道为什么。
标签: c# list generics inheritance