如何在 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

不应该两者都起作用吗?

OnStatesChangedStatesHandler<T> 或从 StatesHandler<T>.

派生的任何内容作为参数

假设因此我们也有

public class SomeOtherHandler : StatesHandler<State>{}

可以调用 OnStatesChanged 将此 class 的对象作为参数传递,因为它是从 StatesHandler<T> 派生的。但是,这无法传递给

private void StateChanged(MyStatesHandler statesHandler)
{
}

因为MyStatesHandlerSomeOtherHandler没有继承关系。

因此事件处理程序必须采用基本 class 参数。