繁体   English   中英

如何在 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)
    {
    }
}

我的问题是为什么添加到侦听器的 function 需要具有签名StatesHandler<State>而不仅仅是MyStatesHandler

两者都不应该工作吗?

OnStatesChangedStatesHandler<T>或从StatesHandler<T>派生的任何内容作为参数。

因此假设我们也有

public class SomeOtherHandler : StatesHandler<State>{}

可以调用OnStatesChanged ,将 class 的 object 作为参数传递,因为它是从StatesHandler<T>派生的。 但是,这不能传递给

private void StateChanged(MyStatesHandler statesHandler)
{
}

因为MyStatesHandlerSomeOtherHandler之间没有 inheritance 关系。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM