Ich habe eine benutzerdefinierte Sammlung, der ich ein ValidateItem-Ereignis hinzufügen möchte. Dieses ValidateItem-Ereignis wird immer dann aufgerufen, wenn ein Element in der benutzerdefinierten Sammlung hinzugefügt oder aktualisiert wird.C# Custom EventArgs Frage
Ich möchte zulassen, dass abgeleitete Klassen in der Lage sind, das Ereignis zu abonnieren und ihre eigene Logik dafür zu bestimmen, ob ein Element "gültig" ist oder nicht und dass es der Sammlung hinzugefügt wird, wenn es "ungültig" ist.
Aber ich versuche herauszufinden, wie ich den Anrufer zu dem Ereignis wissen lassen kann, was vor sich geht und wie man die Information darüber weiterleitet, was vor sich geht.
Meine benutzerdefinierten Ereignisvariablen erben von CancelEventArgs, so dass ich die Möglichkeit habe, das Cancel-Bit zurück an den Aufrufer zu übergeben. Aber ich habe noch nie Fälle gesehen, in denen Fehlerinformationen (Fehlercodes, Nachrichten usw.) auf diese Weise zurückgegeben werden, also frage ich mich, ob dies nicht der beste Ansatz ist.
Sollte ich einfach irgendwelche Fehlerdaten hinzufügen, die ich an meine benutzerdefinierte Eventargs-Klasse zurückgeben möchte, gibt es gute Gründe dafür oder dagegen? Oder gibt es andere, bessere Möglichkeiten, dies zu erreichen?
Hier ist meine 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 nehme an eine andere andere Möglichkeit, so etwas zu verwenden wäre:
virtual bool Validate(object item, ObjectAction action, out string errorMessage)
Methode in den abgeleiteten Klassen. Obwohl ich dazu tendiere, Parameter zu vermeiden ...
Wenn jemand irgendwelche Ideen über die Vor- und Nachteile jedes Ansatzes hat, würde ich mich freuen, sie zu hören!
Danke, Max
Ziemlich gut gesagt +1 –