有没有办法在抽象父类中实现下游委托定义的使用?
代表与类型一样,无法覆盖:
public abstract class ActionIssuerSimple
{
public delegate void ActionHandler();
...
public void Subscribe(ActionHandler handler) { ... }
}
public abstract class ActionIssuer<TAction> : ActionIssuerSimple
{
public override delegate void ActionHandler(TAction parameter);
...
}
上面给出了错误“委托不能覆盖”
给定SillyIssuer : ActionIssuer<SillyAction>
的示例,我的目标是能够使用sillyIssuer.Subscribe((SillyAction action) => { ... });
(除了使用ActionIssuerSimple执行可以运行带有签名() => { }
的处理程序的操作。因为C#不支持在抽象类中使用下游委托定义,无论是通过abstract
,泛型类型参数还是override
,我都找不到这样做的方法:/ p>
答案 0 :(得分:2)
可以使用所需的委托类型作为ActionIssuer
的类型参数转换为泛型类。
答案 1 :(得分:1)
不确定您要实现的目标。您可以覆盖属性/方法而不是类型。委托是一种类型,覆盖委托是什么意思?
我猜您需要一个通用委托,您可以将其作为ActionIssuer<TAction>.Subscribe
方法中的参数。
public delegate void ActionHandler<TAction>(TAction parameter);
public abstract class ActionIssuer<TAction>
{
public void Subscribe(ActionHandler<TAction> handler) { ... }
...
}
然后你可以做
sillyIssuer.Subscribe((SillyAction action) => { ... });
答案 2 :(得分:1)
在编译的程序集中可以看到委托不能被覆盖的原因:
.class auto ansi sealed nested public ActionHandler
extends [mscorlib]System.MulticastDelegate
{
} // end of class ActionHandler
你看,ActionHandler不是这个类的“真实领域” - 它只是一个嵌套的密封类! :d