在类

时间:2016-04-28 09:47:56

标签: c# .net oop events override

目前我还在捣乱,是否覆盖现有方法,例如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

谢谢大家!

1 个答案:

答案 0 :(得分:4)

在这种情况下,覆盖是一个更好的选择,但首先执行基类实现,这样你就不会破坏任何东西,然后在派生类中做任何你想做的事情,如:

public override void OnDoSomeThing(EventArgs e)
{

  base.OnDoSomeThing(e);

  // write here whatever needed

}