C# Benutzerdefinierte EventArgs Frage

Habe ich eine benutzerdefinierte Sammlung, dass ich bin das hinzufügen einer ValidateItem Ereignis. Diese ValidateItem Ereignis wird aufgerufen, wenn ein Element Hinzugefügt oder aktualisiert in der benutzerdefinierten collection.

Möchte ich ermöglichen, abgeleitete Klassen, um in der Lage sein, um das Ereignis zu abonnieren und zu bestimmen, Ihre eigene Logik, ob oder nicht ein Einzelteil ist "gültig" und potenziell verbieten es der Auflistung Hinzugefügt wird, wenn es "invalid".

Aber ich versuche herauszufinden, wie der Anrufer zu der Veranstaltung wissen, was Los ist und wie übergeben Sie die Informationen über das, was da zurück.

Meine benutzerdefinierte eventargs Erben von CancelEventArgs also ich habe die Fähigkeit, übergeben Sie die Abbrechen-bit zurück, um dem Anrufer mit, dass. Aber ich habe nie gesehen, alle Fälle, in denen Fehler-information (error codes, Nachrichten, etc) übergeben bekommt sich wieder in dieser Weise, so Frage ich mich, ob das vielleicht nicht der beste Ansatz sein.

Sollte ich einfach fügen Sie jede Fehlermeldung, die ich wünschte, zu passieren, back zu meiner Benutzerdefinierte eventargs-Klasse, gibt es gute Gründe, die für oder gegen diese? oder gibt es andere, bessere Wege, dies zu erreichen?

Hier ist mein eventargs-Klasse:

public delegate void ItemValidationEventHandler(object sender, ItemValidationEventArgs e);

public class ItemValidationEventArgs : CancelEventArgs
{
    public ItemValidationEventArgs(object item, ObjectAction state, EventArgs e)
    {
        Item = item;
        State = state;
        EventArgs = e;
    }

    public ItemValidationEventArgs(object item, ObjectAction state) : this(item, state, new EventArgs())
    {
    }

    public ItemValidationEventArgs() : this(null, ObjectAction.None, new EventArgs())
    {
    }

    //is there a better way to pass this info?
    public string ErrorMessage {get; set;}
    public int ErrorNumber {get;set;}

    public object Item { get; private set; }
    public ObjectAction State { get; private set; }

    public EventArgs EventArgs { get; private set; }
}

UPDATE: ich glaube, eine andere Möglichkeit wäre die Verwendung von so etwas wie dieses:

virtual bool Validate(object item, ObjectAction action, out string errorMessage) 

Methode in den abgeleiteten Klassen. Obwohl ich dazu Neige zu bevorzugen, die Vermeidung von out-Parametern...

Wenn jemand irgendwelche Ideen auf die vor-und Nachteile jeder Ansatz, den ich lieben würde, zu hören, em!

Dank,
Max

Schreibe einen Kommentar