【发布时间】:2011-08-19 19:02:12
【问题描述】:
在我的抽象类中,我可以监听一个抽象方法并在调用该方法时触发一个事件吗?如果是怎么办?
【问题讨论】:
标签: c# events abstract-class
在我的抽象类中,我可以监听一个抽象方法并在调用该方法时触发一个事件吗?如果是怎么办?
【问题讨论】:
标签: c# events abstract-class
最好的方法如下:
public abstract class MyClass {
public void DoOuter() {
FireEvent();
DoInner();
}
protected abstract void DoInner();
}
当有人想要调用 doInner 时,他们必须调用 DoOuter() 才能执行它。要指定功能,请覆盖 DoInner()。所以FireEvent() 总是在指定DoInner() 功能之前被调用...除非它被子类直接调用,你无法真正防范。
【讨论】:
并不是一个抽象方法总是被覆盖,并且不能保证覆盖调用base.Method() 到它的实现。
最好的办法是创建一个引发事件的虚拟方法,然后让所有覆盖调用base.Method()
如果你想拦截方法调用,here是一个关于如何做到这一点的问题。
【讨论】: