Verstehe ich das richtig, dass ein EventHandler<TEventArgs> das Gleiche ist, wie ein Function<this,TEventArgs> delegate ?
Du meinst Action<object, TEventArgs>
? Dann ja.
Edit: Function
-> Action
Ein Function<object, TEventArgs>
ist mir nicht bekannt, meinst Du Action<object, TEventArgs>
? Das hat zumindest eine ähnliche Definition wie EventHandler<TEventArgs>
.
Und um die Frage zu beantworten:
Nein, es sind immer noch unterschiedliche Typen, sie haben bloß eine ähnliche Definition.
In der Nutzung wird es in den meisten Fällen aussehen, wie als wäre es gleich, aber auch nur, weil der Compiler ein bisschen Zucker drüber streut.
Beispiel:
private static void Handler(object sender, EventArgs e)
{
}
Action<object, EventArgs> handler1 = Handler; // Funktioniert
EventHandler<EventArgs> handler2 = Handler; // Funktioniert auch
EventHandler<EventArgs> handler3 = handler1; // Funktioniert nicht
Action<object, EventArgs> handler4 = handler2; // Funktioniert nicht
Dazu gibt's dann folgende Fehler:> Fehlermeldung:
Cannot implicitly convert type 'System.Action<object,System.EventArgs>' to 'System.EventHandler<System.EventArgs>'
Cannot implicitly convert type 'System.EventHandler<System.EventArgs>' to 'System.Action<object,System.EventArgs>'
NuGet Packages im Code auslesen
lock Alternative für async/await
Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.
Als Zusatz: er meinte vermutlich Func
; Func
hat jedoch im Gegensatz zu Action
eine return value.
Daher korrekt: Ein Event
ähnelt eher der Action
: keine return value.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Stimmt, natürlich Action. EventArgs wird ja ÜBER und nicht zurückgegeben ...
Danke euch für die Antworten 👍