Лучший способ сделать это следующим образом:
public abstract class MyClass {
public void DoOuter() {
FireEvent();
DoInner();
}
protected abstract void DoInner();
}
Когда кто-то хочет вызвать doInner, он должен вызвать DoOuter()
, чтобы выполнить его. Чтобы указать функциональность, вы переопределяете DoInner()
. Таким образом, FireEvent()
всегда вызывается перед тем, как указывается любая функциональность DoInner()
... если только он не вызывается непосредственно дочерним классом, от которого вы не можете реально защитить.