【发布时间】:2010-10-03 09:06:52
【问题描述】:
我知道可以在发生实现声明的类中引发事件,但我希望在基类级别引发事件并引发派生类的事件:
public interface IFoo
{
event EventHandler<FooEventArgs> FooValueChanged;
void RaiseFooValueChanged(IFooView sender, FooEventArgs e);
}
[TypeDescriptionProvider(typeof(FooBaseImplementor))]
public abstract class FooBase : Control, IFoo
{
public virtual event EventHandler<FooEventArgs> FooValueChanged;
public void RaiseFooValueChanged(IFooView sender, FooEventArgs e)
{
FooValueChanged(sender, e);
}
}
我不能有 FooValueChanged 事件抽象,因为这样基类就不能引发事件。当前代码运行,但调用 FooValueChanged(sender, e) 抛出 NullReferenceException,因为它不调用派生类的事件,只调用基类的事件。
我哪里错了?
我可以将事件和引发者都抽象化,但是我需要记住在每个派生类中调用 FooValueChanged(sender, e)。我试图避免这种情况,同时能够将 Visual Studio 设计器用于派生控件。
【问题讨论】:
-
对于阅读此问题的任何人都对我为什么有 TypeDescriptionProvider 感到困惑:urbanpotato.net/default.aspx/document/2001
标签: c# .net winforms events inheritance