目前我还在捣乱,是否覆盖现有方法,例如OnActivate
而不是替代同一类中的event
。
例如,我有以下类,它实现了一个事件:
public class Base
{
public delegate void DoSomeThing(object sender, EventArgs e);
public event DoSomeThing DoSomeThingEventHandler;
public virtual void OnDoSomeThing(EventArgs e)
{
if (DoSomeThingEventHandler != null)
{
DoSomeThingEventHandler(this, e);
}
}
}
如果Base
被调用,我有一个派生自DoSomeThing
的类,希望得到通知。我应该覆盖DoSomeThing
还是应该订阅该事件:
解决方案一:
public class B1 : Base
{
public override void OnDoSomeThing(EventArgs e)
{
// Do some stuff here
base.OnDoSomeThing(e);
}
}
第二个解决方案
public class B2 : Base
{
public B2()
{
DoSomeThingEventHandler += B2_DoSomeThingEventHandler;
}
private void B2_DoSomeThingEventHandler(object sender, EventArgs e)
{
// Do some thing here
}
}
您更喜欢解决方案B1
还是B2
?
谢谢大家!
答案 0 :(得分:4)
在这种情况下,覆盖是一个更好的选择,但首先执行基类实现,这样你就不会破坏任何东西,然后在派生类中做任何你想做的事情,如:
public override void OnDoSomeThing(EventArgs e)
{
base.OnDoSomeThing(e);
// write here whatever needed
}