Was ist Delegation? Zusammenfassung der wichtigen Funktionsdelegierung in .net

零下一度
Freigeben: 2017-06-24 09:41:00
Original
2933 Leute haben es durchsucht

Delegation ist eine sehr wichtige Funktion in .net. Sie ist seit Version .net 1.x enthalten. Delegation wird häufig im Projektentwicklungsprozess verwendet, aber viele Studenten haben sie nicht ganz klar verstanden (auch ich). Da ich viele Jahre lang in der Entwicklung tätig war, habe ich die Delegation möglicherweise an vielen Stellen unwissentlich verwendet, bin mir aber immer noch nicht ganz im Klaren. Daher werde ich eine Reihe von Artikeln zusammenstellen, um meinen Eindruck von Delegation zusammenzufassen und zu vertiefen.

Was ist ein Delegat?

kann in zwei Punkten zusammengefasst werden:

1. Das gängigste Verständnis ist: Ein sicherer „Funktionszeiger“.

2. Im Wesentlichen ist ein Delegat eine Klasse (kann wie unten gezeigt durch IL bewiesen werden), und der Delegat enthält mehrere Methoden mit derselben Methodensignatur und demselben Rückgabewert.

Delegiertes Klassendiagramm:

Aus dem obigen Bild Wir können einige Informationen erhalten: 1. Der Delegat ist eine Klasse. 2. Der Delegat erbt vom Typ System.MulticastDelegate.

Warum Delegation verwenden?

Eine beliebtere Aussage ist, welche Vorteile die Verwendung von Delegation bringen kann.

Das Folgende ist ein kleines Beispiel, um die Vorteile der Delegation zu demonstrieren. Voraussetzung ist, dass die Konsole bei Eingabe des Namens chinesische bzw. englische Begrüßungen ausgibt.

Verwenden Sie keine Delegation:

 1 namespace DelegateDemo 2 { 3     class Program 4     { 5         static void Main(string[] args) 6         { 7             //通过输入的name,控制台分别打印中文和英文的问候语 8             Hello("麦子", Language.Chinese); 9             Hello("mcgrady", Language.English);10 11             Console.ReadKey();12         }13 14         /// <summary>15         /// 问候16         /// </summary>17         /// <param name="name"></param>18         /// <param name="lang"></param>19         private static void Hello(string name, Language lang)20         {21             if (lang == Language.Chinese)22             {23                 ChineseHello(name);24             }25             if (lang == Language.English)26             {27                 EnglishHello(name);28             }29         }30 31         /// <summary>32         /// 中文问候33         /// </summary>34         /// <param name="name"></param>35         private static void ChineseHello(string name)36         {37             Console.WriteLine(string.Format("你好,{0}", name));38         }39 40         /// <summary>41         /// 英文问候42         /// </summary>43         /// <param name="name"></param>44         private static void EnglishHello(string name)45         {46             Console.WriteLine(string.Format("hello,{0}", name));47         }48 49     }50 51     /// <summary>52     /// 语言类型53     /// </summary>54     public enum Language55     {56         English,57         Chinese58     }59 }
Nach dem Login kopieren

Wenn Sie keine Delegation verwenden, müssen Sie eine Aufzählungssprache verwenden . Es gibt an, ob chinesische oder englische Grüße verwendet werden sollen, und es muss auch beurteilt werden, ob ... sonst ...

Es kann viel einfacher sein, wenn die Methode direkt übergeben werden kann.

Verwenden Sie die Delegation:

 1 namespace DelegateDemo 2 { 3     //声明委托 4     delegate void MyDel(string name); 5  6     class Program 7     { 8         static void Main(string[] args) 9         {10             //通过输入的name,控制台分别打印中文和英文的问候语11             Hello("麦子", ChineseHello);12             Hello("mcgrady", EnglishHello);13 14             Console.ReadKey();15         }16 17         /// <summary>18         /// 问候19         /// </summary>20         /// <param name="name"></param>21         /// <param name="myDel"></param>22         private static void Hello(string name, MyDel myDel)23         {24             myDel(name);25         }26 27         /// <summary>28         /// 中文问候29         /// </summary>30         /// <param name="name"></param>31         private static void ChineseHello(string name)32         {33             Console.WriteLine(string.Format("你好,{0}", name));34         }35 36         /// <summary>37         /// 英文问候38         /// </summary>39         /// <param name="name"></param>40         private static void EnglishHello(string name)41         {42             Console.WriteLine(string.Format("hello,{0}", name));43         }44 45     }46 }
Nach dem Login kopieren

Zusammenfassend lässt sich sagen, dass die Delegation das Wesentliche bringt Die Vorteile sind wie folgt:

1. Es erspart eine Menge if...else...oder switch... Urteile und macht das Programm objektorientierter.

2. Durch die Entkopplung lässt sich das Programm einfacher erweitern. Beispiel: Tracy.Proxy-Schnittstellen-Proxy-Komponente, zeichnet XML-Protokolle und Leistungsprotokolle auf.

Dies ist natürlich nur ein Beispiel, um die Vorteile der Delegation zu veranschaulichen. Tatsächlich wird Delegation an vielen Stellen verwendet, z. B. bei Schaltflächenklickereignissen in Winform und Webform, bei der Funktions- und Aktionsdelegierung in Linq usw . .

Delegierte Anwendungsszenarien

1. Winform- und Webform-Button-Klickereignisse.

2, Funktions- und Aktionsdelegierte in Linq.

3, Tracy.Proxy-Schnittstellen-Proxy-Komponente

Verwenden Sie XMind zur Zusammenfassung:

Das obige ist der detaillierte Inhalt vonWas ist Delegation? Zusammenfassung der wichtigen Funktionsdelegierung in .net. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!