我有一个基类 DockedToolWindow : Form,以及许多从 DockedToolWindow 派生的类。我有一个容器类,它保存并将事件分配给 DockedToolWindow 对象,但是我想从子类调用事件。
我实际上有一个关于如何实现这个MSDN 网站告诉我要做的事情的问题。下面的这一部分给了我这个问题:
// The event. Note that by using the generic EventHandler<T> event type
// we do not need to declare a separate delegate type.
public event EventHandler<ShapeEventArgs> ShapeChanged;
public abstract void Draw();
//The event-invoking method that derived classes can override.
protected virtual void OnShapeChanged(ShapeEventArgs e)
{
// Make a temporary copy of the event to avoid possibility of
// a race condition if the last subscriber unsubscribes
// immediately after the null check and before the event is raised.
EventHandler<ShapeEventArgs> handler = ShapeChanged;
if (handler != null)
{
handler(this, e);
}
}
当然这个例子可以编译和工作,但是当我用“Move”(我从Form派生的一个事件)替换“ShapeChanged”时,它错误地说我不能在没有+=或-=的情况下在右侧移动。我还删除了 ShapeEventArgs 通用标签。
任何煽动为什么这不起作用?在类中声明的事件和继承的事件有什么区别?