2016-04-28 67 views
1

目前我struggeling,是否在同一类覆盖现有的方法,例如OnActivate而不是subsripte一个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 
    } 
} 

,你想不想解决B1B2

谢谢大家!

+0

你必须重写事件 –

回答

4

在这种情况下,压倒一切的是一个更好的选择,但先执行基类的实现,这样就不会破坏任何东西,之后做任何你想在喜欢的派生类:

public override void OnDoSomeThing(EventArgs e) 
{ 

    base.OnDoSomeThing(e); 

    // write here whatever needed 

} 
+0

好了,把它的顶部是有道理的。只是可能需要一些'if'语句,当我想避免调用任何事件... – BendEg

+0

是调用基地后,你可以写无论你的业务逻辑是派生类型 –

+0

是的,谢谢! – BendEg