0
假设我在某个类的c#中创建了一个自定义事件并广播了该事件,包括类本身。现在我怎么能在这种情况下创建继承?我该怎么办,如果事件是从同一个子类发送到子类,而不是从父发送到父:是否有办法做到这一点与关闭某种方式来保持子上下文,而代码将在父身体上是由于这种继承?C#自定义事件,继承和关闭
假设我在某个类的c#中创建了一个自定义事件并广播了该事件,包括类本身。现在我怎么能在这种情况下创建继承?我该怎么办,如果事件是从同一个子类发送到子类,而不是从父发送到父:是否有办法做到这一点与关闭某种方式来保持子上下文,而代码将在父身体上是由于这种继承?C#自定义事件,继承和关闭
你在问如何从派生类中引发基类事件吗?
你不能直接这样做,因为事件委托字段对定义它的类是私有的(在我们的例子中是基类)。但是,您可以声明一个保护方法,该方法在基类中引发事件并从派生类中调用该方法。常用的符号暗示调用该方法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
}
}
注意,你绝对不必重写加注方法,但我认为这只是对自己的事件做出反应的更好的解决方案,而不是以通常的方式订阅它们。
非常模糊,而我所理解的很少,我没有看到适用的用例。建议您提供一些示例代码以及您打算完成的更详细的描述。 – abelenky 2011-02-06 02:06:06
我不明白这个问题。 – Amy 2011-02-06 02:11:34