我不确定如何说出我想要的内容,所以我只会展示不起作用的代码:
abstract class EventListener<T> where T : IEvent
{
}
interface IEvent
{
}
/*
* Simplified a bit, normally this class would use a dictionary of event listeners
*/
class Manager
{
private EventListener<IEvent> listener;
public void RegisterListener<T>(EventListener<T> subject) where T : IEvent
{
// here is the issue
listener = subject;
}
}
/*
* Implementation
*/
class FooEvent : IEvent
{
}
class FooListener : EventListener<FooEvent>
{
}
当我尝试将subject
分配给listener
时,会出现此问题。我在分配之前尝试过施法,但遇到了类似的问题:
EventListener<IEvent> casted = subject as EventListener<IEvent>;
events.Add(typeof(T), casted);
有没有办法让这项工作?
答案 0 :(得分:1)
添加非通用接口IEventListener
:
interface IEventListener
{ }
由EventListener<T>
班级实施:
abstract class EventListener<T> : IEventListener where T : IEvent
{
}
将您的Manager.listener
字段类型更改为IEventListener
:
private IEventListener listener;