如何在 C# 中添加带有泛型的抽象 class 作为委托的参数
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)
{
}
}
我的问题是为什么添加到侦听器的函数需要签名 StatesHandler<State>
而不仅仅是 MyStatesHandler
?
不应该两者都起作用吗?
OnStatesChanged
将 StatesHandler<T>
或从 StatesHandler<T>
.
派生的任何内容作为参数
假设因此我们也有
public class SomeOtherHandler : StatesHandler<State>{}
可以调用 OnStatesChanged
将此 class 的对象作为参数传递,因为它是从 StatesHandler<T>
派生的。但是,这无法传递给
private void StateChanged(MyStatesHandler statesHandler)
{
}
因为MyStatesHandler
和SomeOtherHandler
没有继承关系。
因此事件处理程序必须采用基本 class 参数。
我有一个名为 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)
{
}
}
我的问题是为什么添加到侦听器的函数需要签名 StatesHandler<State>
而不仅仅是 MyStatesHandler
?
不应该两者都起作用吗?
OnStatesChanged
将 StatesHandler<T>
或从 StatesHandler<T>
.
假设因此我们也有
public class SomeOtherHandler : StatesHandler<State>{}
可以调用 OnStatesChanged
将此 class 的对象作为参数传递,因为它是从 StatesHandler<T>
派生的。但是,这无法传递给
private void StateChanged(MyStatesHandler statesHandler)
{
}
因为MyStatesHandler
和SomeOtherHandler
没有继承关系。
因此事件处理程序必须采用基本 class 参数。