DELEGATES, EVENTS(EVENT HANDLERS/EVENT LISTENERS), KONZEPTE(MULTICASTING/BROADCASTING), AKTION & FUNC
Dies wird lang sein, aber es ist die einfachste Erklärung, das Problem dabei ist, dass es so ärgerlich ist, weil die Leute einfach unterschiedliche Wörter verwenden, um dasselbe zu erklären
Zunächst sollten Sie ein paar Dinge wissen
DELEGATES: Es ist einfach eine Liste von Methoden, warum eine Liste erstellen? Weil, wenn Ihr Code ausgeführt wird, wird diese Liste genommen und jede Methode darin wird nacheinander ausgeführt, hören Sie nicht einfach auf Textbuchdefinitionen, nehmen Sie dies und Sie werden alles richtig machen
auch genannt :
- ein Zeiger auf eine Funktion
- ein Wrapper für eine Methode, der Methoden senden und empfangen kann wie eine Variable
um einen Delegaten zu erstellen, gehen Sie
[[Zugriffsmodifizierer] delegieren [Rückgabetyp] [Delegatenname]([Parameter])]
Beispiel: public delegate int demo(int a);
jetzt, um alle diese Methoden auszuführen, die in einer Liste namens Delegaten gespeichert sind, gehen Sie
1. demo aufrufen(a);
2. demo(a); ..... beides ist gültig
Die Verwendung des Punktes und das explizite Angeben von invoke kommt in der asynchronen Programmierung zum Einsatz, wenn Sie beginInvoke verwenden, aber das ist nicht Teil dieses Themas
es gibt noch eine weitere Sache namens "Erstellen eines Objekts des Delegaten/Instanziierung des Delegaten", was im Grunde genommen ist, wie es klingt, aber nur um Verwirrung zu vermeiden, geht es wie folgt (für das obige Beispiel )
Beispiel: demo del = new demo(); (oder) Public demo del = null;
um einer Liste namens Delegaten eine Methode hinzuzufügen, gehen Sie += und Sie müssen sie auch entfernen, sobald die "Anforderungen der Methoden erfüllt sind", gehen Sie -=
("Anforderungen der Methoden erfüllt sind" bedeutet, dass Sie die Methode nicht mehr aktiv benötigen oder auch "nachhören") Wenn Sie sie nicht entfernen, könnte dies zu einem "Speicherleck" führen, was bedeutet, dass der RAM Ihres Computers aufgefressen wird, technisch gesehen wird der zugewiesene Speicher nicht freigegeben
Beispiel: sagen wir, es gibt eine Methode
public int berechnen (int c)
um diese Methode zum Delegaten hinzuzufügen, gehen Sie
1. del = berechnen;
2. del += berechnen; .... alle sind gültig
zum Entfernen
del -= berechnen
zunächst einmal beachten Sie die Ähnlichkeiten zwischen dem Delegaten und der Methode, der Rückgabetyp (Output) und die Eingangs-/Parameter sind gleich, und das ist eine Regel, Sie können nicht einfach irgendwelche zufälligen oder Haufen von Methoden in einem Delegaten hinzufügen, es muss die Ein-Aus-Regel befolgen
jetzt warum gibt es 2 verschiedene Arten, eine Sache zu tun, der einzige Unterschied sind die Zuweisungsoperatoren (+, =), das führt zu einem neuen Thema namens
EVENTS
was nichts anderes als eine eingeschränkte Version eines Delegaten ist, es ist immer noch eine Liste von Methoden, lassen Sie sich nicht verwirren, wenn die Leute diese Terminologien erklären, sie ändern den Namen, also bleiben Sie bei dieser Erklärung, um es zu verstehen
was ist die Einschränkung? Sie können dies nicht tun del = berechnen;
was ist daran schlimm, sagen wir, eine Reihe von Methoden wird dem Delegaten (Liste) hinzugefügt, wenn Sie das tun, werden alle gelöscht und es bleibt nur eine einzige Methode "berechnen" übrig, um das zu verhindern, werden Events verwendet, Event-Syntax
Public Event demo del = null;
Noch eine Sache, die Sie mit Events nicht tun können, ist den Delegaten direkt wie demo.invoke
aufzurufen, da er öffentlich ist, kann er zugegriffen und aufgerufen werden, aber bei Events geht das nicht
jetzt fügen Sie einfach die Methoden zum Event hinzu (einem speziellen Typ des Delegaten)
wann Sie ein Event vs. einen Delegaten verwenden, hängt von Ihrer Situation ab, aber pragmatisch gesehen sind Events beliebt
ein paar weitere Schlüsselwörter
MULTICASTING: nichts anderes als das Hinzufügen von mehr als einer Methode zu einem Delegaten BROADCASTING: Hinzufügen von mehr als einer Methode zu einem Event
PUBLISHER: derjenige, der die Methode ausführt (ein Begriff, der bei der Übertragung verwendet wird), nur eine einzelne Einheit ABONNENT: Die Methoden, die ausgeführt werden, können mehrere sein
LÖSCHER: dasselbe wie ein Abonnent, aber der Begriff wird beim Multicasting verwendet
EVENT HANDLER: dasselbe wie ein Abonnent/Eventlistener, also wo liegt der Unterschied? im Grunde genommen ist es dasselbe, einige sagen, ein Ereignislistener erkennt, wann das Ereignis eintritt, und der Ereignisbehandler "bearbeitet" oder führt den Code aus, ES IST IM PRAKTIKUM DAS GLEICHE!
Aktion und Funktion sind einfach Delegaten, die erstellt und instanziiert wurden, also 2 Zeilen Code in einem Wort, der Unterschied liegt nur in den Rückgabetypen
AKTION: gibt nichts zurück, nimmt jedoch 0 oder mehr als 1 Eingabe entgegen
FUNK: gibt etwas zurück und nimmt Parameter an
wenn Sie nicht gut im Lesen sind, hier ist das beste Video zu diesem Thema
https://www.youtube.com/playlist?list=PLFt_AvWsXl0dliMtpZC8Qd_ru26785Ih_