4 Stimmen

Vermeiden einer großen Anzahl von benutzerdefinierten EventArgs?

Die Klassenbibliothek, die ich überarbeite, hat eine große Anzahl von Ereignissen (über 50), jedes mit seinem eigenen Delegaten, obwohl viele die gleichen Argumente haben. Ich fange an, sie alle umzuschalten, um EventHandler und benutzerdefinierte EventArgs zu verwenden, aber es erweist sich als mühsam und zeitaufwendig.

Gibt es einen einfacheren Weg, um eine solche Situation zu bewältigen, wenn Sie eine große Anzahl von Ereignissen haben?

6voto

Jon Skeet Punkte 1325502

Sie brauchen sicherlich keinen eigenen Delegatentyp - Sie können die EventHandler<TEventArgs> wobei TEventArgs ist Ihr spezifisches EventArgs Unterklasse.

Das Refactoring eines großen Durcheinanders ist immer zeitaufwendig und ärgerlich. Wenn Sie auf die Verwendung von Methodengruppen-Konvertierungen umsteigen, kann es in Zukunft jedoch einfacher werden:

// This...
foo.SomeEvent += new MyCustomEventHandler(SomeMethod);

// becomes this..
foo.SomeEvent += SomeMethod;

Wenn dann der Typ von SomeEvent ändert, können Sie die SomeMethod und das Abonnement wird einfach funktionieren, ohne dass es erneut geändert werden muss.

Ob Sie mehrere verschiedene EventArgs Subtypen ist eine andere Sache - und unmöglich zu sagen, ohne Ihre spezielle Situation zu kennen. Wenn Sie eine Vielzahl von Informationen weitergeben müssen, kann dies durchaus sinnvoll sein.

2voto

Taylor Leese Punkte 48438

Ich verwende eine schablonenhafte Ereignis-Argsklasse wie unten, um zu vermeiden, dass ich eine große Anzahl von benutzerdefinierten Ereignis-Argsklassen erstellen muss.

public class MessageEventArgs<T> : EventArgs
{
    public MessageEventArgs(T message)
    {
        Message = message;
    }

    public T Message
    {
        get;
        private set;
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X