[英]How to add abstract class with generic as argument of delegate in c#
我有一个名为StatesHandler
的抽象 class ,其泛型类型为T
。 在这个 class 中,我有一个从 class 内部调用的代表:
public abstract class StatesHandler<T>
{
public event Action<StatesHandler<T>> OnStatesChanged;
private void Function(){
OnStatesChanged(this);
}
}
然后我有这个抽象 class 的实现,其中State
是一个枚举:
public class MyStatesHandler : StatesHandler<State>{}
在第三个 class 中,我向这个委托添加了一个监听器:
public class MyThirdClass
{
private MyStatesHandler myStatesHandler;
private void AddListener()
{
myStatesHandler.OnStatesChanged += StateChanged;
}
private void StateChanged(StatesHandler<State> statesHandler)
{
}
}
我的问题是为什么添加到侦听器的 function 需要具有签名StatesHandler<State>
而不仅仅是MyStatesHandler
?
两者都不应该工作吗?
OnStatesChanged
将StatesHandler<T>
或从StatesHandler<T>
派生的任何内容作为参数。
因此假设我们也有
public class SomeOtherHandler : StatesHandler<State>{}
可以调用OnStatesChanged
,将 class 的 object 作为参数传递,因为它是从StatesHandler<T>
派生的。 但是,这不能传递给
private void StateChanged(MyStatesHandler statesHandler)
{
}
因为MyStatesHandler
和SomeOtherHandler
之间没有 inheritance 关系。
因此,事件处理程序必须采用基本 class 参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.