|
|
Veröffentlicht am 19.01.2017 15:18:00
|
|
|
|

Ich mache schon lange .NET-Entwicklung und habe kürzlich das Buch "C# Advanced Programming" rezensiert. Ich habe festgestellt, dass viele Probleme, die ich früher zu verstehen schien, aber nicht verstanden habe, tatsächlich langsam untersucht und verstanden werden können.
Deshalb plane ich, einen Blogbeitrag über die "C# Advanced Programming Series" zu schreiben. Es wird auf das Konzept des Buches "C# Advanced Programming" zurückgreifen und auch auf die Blogbeiträge anderer Experten Bezug nehmen, ich hoffe, Sie verstehen das. Wenn etwas nicht stimmt, korrigiere es bitte.
(Außerdem: Dieser Blogbeitrag wird die Grundlagen von Definitionen und Grammatik nicht erklären.) )
Sprechen wir über die Indienststellung.
Delegate wird in .NET weit verbreitet verwendet. Lambda-Ausdrücke, Ereignisse, Anonymitätsmethoden usw. werden enthalten sein (bleiben Sie dran für weitere Blogbeiträge).
Was ist also Anvertrauen?
Laienausdrücklich unterscheiden sich Delegierte nicht von der Spezifizierung von Methoden, außer dass sie das Delegierten-Schlüsselwort angeben müssen und keine Methodenentität besitzen. Man kann es zum Beispiel als Platzhalter betrachten, wenn man Code schreibt, ohne zu wissen, womit man es zu tun hat. Du musst nur wissen, welchen Parametertyp und Ausgabetyp du einführen willst, und diese definieren. Dies ist die im Buch vermittelte Methode, dass die Unterschrift dasselbe bedeuten muss.
Definieren wir eine grundlegende Delegation:
Ausführungsergebnisse:
Siehst du den oben genannten praktischen Ort, den man anvertrauen sollte? NämlichEin Delegierter kann jede Methode mit demselben Eingabeparametertyp und Rückgabetyp ausführen oder sogar eine Methodenwarteschlange mit derselben Signatur.
Müssen also unsere Methodensignaturen (also Import- und Ausgabeparameter) wirklich exakt identisch mit denen des Delegierten sein? Antwort: Nein, wir können Kovarianz und inverse Variation nicht ignorieren. Lassen Sie uns kurz das Wissen über Kovarianten und Inverter vorstellen.
"Kovarianz" bedeutet, einen Typ verwenden zu können, der stärker abgeleitet ist als der ursprünglich angegebene abgeleitete Typ. "Inverter" bezeichnet die Fähigkeit, einen Typ mit einem geringeren Ableitungsgrad zu verwenden. Dann unterliegt auch unsere Kommission Kovarianz und Inverse.
Das bedeutet, dass, wenn ein Delegierter definiert ist, nicht nur exakt dieselbe Signaturmethode der Delegiertenvariable einen Wert zuweisen kann.
Wenn die Parametertabelle einer Methode mit der Delegiertenerklärung übereinstimmt, aber eine abgeleitete Klasse von zurückgibt (die Delegiertenerklärung gibt den Typ zurück), kann die Methode auch dieser Delegiertenvariable zugeordnet werden.
Wenn der Rückgabetyp einer Methode mit der Delegiertendeklaration übereinstimmt, das Argument aber die Vorfahrerklasse des Delegiertendeklarationsparametertyps ist, kann die Methode auch der Delegiertenvariable zugewiesen werden.
Wenn die Parameter und der Rückgabetyp einer Methode den Annahmen in den beiden obigen Zeilen entsprechen, kann die Methode auch der Delegiertenvariablen zugeordnet werden.
Im Folgenden ein einfaches Beispiel für Kovarianten vs. Wechselrichter:
Kovarianz:
Wechselrichter:
|
Vorhergehend:MFC-DesignNächster:Wie findet man heraus, in welchem Prozess-PID eine Datei belegt ist
|