Ich habe eine Basisklasse DockedToolWindow : Form, und viele Klassen, die von DockedToolWindow ableiten. Ich habe eine Containerklasse, die Ereignisse zu DockedToolWindow-Objekten hält und zuweist, aber ich möchte die Ereignisse von der Kindklasse aufrufen.
Ich habe eigentlich eine Frage dazu, wie man das umsetzen kann, was hier MSDN-Website mir sagt, was ich tun soll. Dieser Abschnitt unten bereitet mir Probleme:
// 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);
}
}
Sicher dieses Beispiel kompiliert und funktioniert, aber wenn ich ersetzen "ShapeChanged" mit "Move" (ein Ereignis, das ich von der Ableitung von Form erworben), es Fehler sagen, ich kann nicht Move auf der rechten Seite ohne += oder -=. Ich habe auch die ShapeEventArgs generische Tags entfernt.
Gibt es Hinweise darauf, warum das nicht funktioniert? Was ist der Unterschied zwischen einem Ereignis, das innerhalb der Klasse deklariert ist, und einem, das vererbt wird?