Heim > Backend-Entwicklung > C#.Net-Tutorial > Detaillierte Erläuterung der Verwendung von C#-Delegaten (Delegates)

Detaillierte Erläuterung der Verwendung von C#-Delegaten (Delegates)

高洛峰
Freigeben: 2016-12-14 11:14:17
Original
1241 Leute haben es durchsucht

1. Was ist Delegation?

Eigentlich habe ich darüber nachgedacht, wie ich die Delegation ausführlicher erklären kann. Ehrlich gesagt hat jeder eine andere Meinung, weil er das Problem aus unterschiedlichen Blickwinkeln betrachtet. Persönlich denke ich, dass es aus den folgenden zwei Punkten verstanden werden kann:

(1) In Bezug auf die Datenstruktur ist die Delegation ein benutzerdefinierter Typ wie eine Klasse.

(2) In Bezug auf Entwurfsmuster stellt die Delegation (Klasse) die Abstraktion von Methoden (Objekten) bereit.

Welche Daten speichert ein Delegat, da er ein Typ ist?

Wir wissen, dass ein Delegat eine Abstraktion einer Methode ist und die Adressen einer Reihe von Methoden mit derselben Signatur und demselben Rückgabetyp speichert. Wenn ein Delegat aufgerufen wird, werden alle im Delegaten enthaltenen Methoden ausgeführt.

2. Definition des Delegatentyps

Ein Delegat ist ein Typ, genau wie eine Klasse ein Typ ist. Wie Klassen müssen Delegattypen deklariert werden, bevor sie zum Erstellen von Variablen und Typobjekten verwendet werden können.

delegate void MyDel(int x);
Nach dem Login kopieren

Deklaration des Delegate-Typs:

(1) Beginnt mit dem Schlüsselwort „delegate“.

(2) Rückgabetyp + Name des Delegatentyps + Parameterliste.

3. Delegierte Variablen

MyDel del1,del2;
Nach dem Login kopieren

4. Delegatvariablen initialisieren

(1) Verwenden Sie den neuen Operator

Die Operanden des neuen Operators setzen sich wie folgt zusammen:

Delegierter Typname

Eine Reihe von Klammern, die die Methode enthalten, die das erste Mitglied des Anruflistennamens ist. Methoden können Instanzmethoden oder statische Methoden sein.

del1 = new MyDel( myInstObj.MyM1 );
del2 = new MyDel( SClass.OtherM2 );
Nach dem Login kopieren

(2) Verwenden Sie die Verknüpfungssyntax

Verknüpfungssyntax, die nur aus Methodenspezifizierern besteht. Dies funktioniert, weil es eine implizite Konvertierung zwischen dem Methodennamen und dem entsprechenden Delegate-Typ gibt.

del1 = myInstObj.MyM1;
del2 = SClass.OtherM2;
Nach dem Login kopieren

5. Zuweisung von Delegaten

Da Delegaten Referenztypen sind, können wir die in der Delegate-Variablen enthaltene Methodenadressenreferenz ändern, indem wir ihr einen Wert zuweisen . Alte Referenzen werden vom Garbage Collector zurückgefordert.

MyDel del;
del = myInstaObj.MyM1; //委托初始化
del = SClass.OtherM2;//委托重新赋值,旧的引用将被回收
Nach dem Login kopieren

6. Delegierte kombinieren

Delegierte können mithilfe zusätzlicher Operatoren kombiniert werden. Diese Operation erstellt letztendlich einen neuen Delegaten, dessen Anrufliste die Verkettung von Kopien der Delegaten-Anruflisten der beiden Operanden ist.

Der Delegat ist konstant und der Operandendelegat wird nach seiner Erstellung nicht geändert. Die Delegatenkombination kopiert eine Kopie des Operanden.

MyDel del1 = myObj.MyMethod;
MyDel del2 = SClass.OtherM2;
MyDel del3 = del1 + del2;   //组合调用列表
Nach dem Login kopieren

7. Additions- und Subtraktionsoperationen delegieren

Sie können den Operator += verwenden, um dem Delegaten neue Methoden hinzuzufügen.

Sie können auch den Operator -= verwenden, um Methoden von Delegaten zu entfernen.

MyDel del = myObj.MyMethod;
del += SClass.OtherM2; // 增加方法del -= myObj.MyMethod; // 移除方法
Nach dem Login kopieren

8. Delegate-Aufruf

Delegate-Aufruf ähnelt dem Methodenaufruf. Nachdem der Delegat aufgerufen wurde, wird jede Methode in der Aufrufliste ausgeführt.

Bevor Sie den Delegaten aufrufen, sollten Sie feststellen, ob der Delegat leer ist. Der Aufruf eines leeren Delegaten löst eine Ausnahme aus.

if(null != del)
{
     del();//委托调用}
Nach dem Login kopieren

9. Anonyme Methoden

Anonyme Methoden sind Methoden, die bei der Initialisierung des Delegaten inline deklariert werden.

Grundstruktur:

deleage( 参数 ) { 语句块 }
Nach dem Login kopieren

Zum Beispiel:

delegate int MyDel (int x); //定义一个委托 
MyDel del = delegate( int x){ return x; };
Nach dem Login kopieren

Aus dem Obigen können wir ersehen, dass anonyme Methoden den deklarierten Rückgabewert nicht anzeigen.

10. Lambda-Ausdruck

Der Lambda-Ausdruck wird hauptsächlich zur Vereinfachung der Syntax anonymer Methoden verwendet. Bei anonymen Methoden ist das Schlüsselwort „delegate“ etwas überflüssig, da der Compiler bereits weiß, dass wir die Methode dem Delegaten zuweisen. Mit ein paar einfachen Schritten können wir eine anonyme Methode in einen Lambda-Ausdruck umwandeln:

Entfernen Sie das Delegate-Schlüsselwort

Verhindern Sie den Lambda-Operator zwischen der Parameterliste und dem anonymen Methodenkörper => Der Lambda-Operator wird „goes to“ ausgesprochen.

MyDel del = delegate( int x) { return x; };//匿名方法
MyDel del2 = (int x) => {return x;};//Lambda表达式
MyDel del3 = x => {return x};//简写的Lambda表达式
Nach dem Login kopieren


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage