Laden...

Ist ein EventHandler<TEventArgs> das Gleiche wie ein Function<this,TEventArgs> delegate?

Erstellt von CoderboyPB vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.187 Views
C
CoderboyPB Themenstarter:in
327 Beiträge seit 2008
vor 5 Jahren
Ist ein EventHandler<TEventArgs> das Gleiche wie ein Function<this,TEventArgs> delegate?

Verstehe ich das richtig, dass ein EventHandler<TEventArgs> das Gleiche ist, wie ein Function<this,TEventArgs> delegate ?

2.080 Beiträge seit 2012
vor 5 Jahren

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.

16.842 Beiträge seit 2008
vor 5 Jahren

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.

C
CoderboyPB Themenstarter:in
327 Beiträge seit 2008
vor 5 Jahren

Stimmt, natürlich Action. EventArgs wird ja ÜBER und nicht zurückgegeben ...

Danke euch für die Antworten 👍