2011-02-06 25 views
0

假设我在某个类的c#中创建了一个自定义事件并广播了该事件,包括类本身。现在我怎么能在这种情况下创建继承?我该怎么办,如果事件是从同一个子类发送到子类,而不是从父发送到父:是否有办法做到这一点与关闭某种方式来保持子上下文,而代码将在父身体上是由于这种继承?C#自定义事件,继承和关闭

+4

非常模糊,而我所理解的很少,我没有看到适用的用例。建议您提供一些示例代码以及您打算完成的更详细的描述。 – abelenky 2011-02-06 02:06:06

+4

我不明白这个问题。 – Amy 2011-02-06 02:11:34

回答

2

你在问如何从派生类中引发基类事件吗?
你不能直接这样做,因为事件委托字段对定义它的类是私有的(在我们的例子中是基类)。但是,您可以声明一个保护方法,该方法在基类中引发事件并从派生类中调用该方法。常用的符号暗示调用该方法On[EventName]并使其虚拟的,这样派生类可以拦截(或取消)事件的认识:

class Base { 
    public event EventHandler Bang; 

    protected virtual void OnBang() 
    { 
     if (Bang != null) 
      Bang (this, EventArgs.Empty); 
    }  
} 

class Derived : Base { 
    public void DoSomething() 
    { 
     // let's bang for some fun 
     OnBang(); // will raise Bang 
    } 

    protected override void OnBang() 
    { 
     Console.WriteLine ("It's gonna bang now!"); 
     base.OnBang(); // if we remove this line, event will not be fired 
    } 
} 

注意,你绝对不必重写加注方法,但我认为这只是对自己的事件做出反应的更好的解决方案,而不是以通常的方式订阅它们。