Heim >Backend-Entwicklung >C#.Net-Tutorial >Fassen Sie den Zusammenhang und den Unterschied zwischen Delegation und Veranstaltungen zusammen

Fassen Sie den Zusammenhang und den Unterschied zwischen Delegation und Veranstaltungen zusammen

零下一度
零下一度Original
2017-06-26 15:40:484129Durchsuche

Bei Vorstellungsgesprächen werden wir oft gefragt, was der Zusammenhang und der Unterschied zwischen Aufträgen und Veranstaltungen ist. Ich habe es noch nie vollständig verstanden, deshalb werde ich es unten zusammenfassen.

Beginnen Sie mit einer interessanten Anforderung. Es gibt drei Charaktere: die Katze, die Maus und den Besitzer. Wenn die Katze miaut, beginnt die Maus wegzulaufen und der Besitzer erwacht aus dem Schlaf.

Verwenden Sie Ereignisse, um

wie folgt zu implementieren:

 1 namespace ConsoleApplication4 2 { 3     class Program 4     { 5         static void Main(string[] args) 6         { 7             Cat cat = new Cat("猫"); 8             Mouse mouse1 = new Mouse("老鼠", cat); 9             Master master = new Master("张三", cat);10             //猫叫,通知所有订阅者11             cat.CatCry();12 13             Console.ReadKey();14         }15     }16 17     #region 猫18     public class Cat19     {20         private string name;21 22         //声明事件23         public event EventHandler<CatCryEventArgs> CatCryEvent;24 25         public Cat(string name)26         {27             this.name = name;28         }29 30         public void CatCry()31         {32             //声明事件参数33             CatCryEventArgs args = new CatCryEventArgs(name);34             Console.WriteLine(args);35 36             //触发事件37             CatCryEvent(this, args);38         }39     }40 41     /// <summary>42     /// 事件参数43     /// </summary>44     public class CatCryEventArgs : EventArgs45     {46         private string catName;47 48         public CatCryEventArgs(string catName)49             : base()50         {51             this.catName = catName;52         }53 54         public override string ToString()55         {56             return string.Format("{0}叫了", catName);57         }58     }59     #endregion60 61     #region 老鼠62     public class Mouse63     {64         private string name;65         public Mouse(string name, Cat cat)66         {67             this.name = name;68             cat.CatCryEvent += CatCryEventHandler;//本质上就是往委托链中添加一个方法69         }70 71         //事件处理程序72         private void CatCryEventHandler(object sender, CatCryEventArgs e)73         {74             Console.WriteLine("{0}逃走了:我勒个去,赶紧跑啊!", name);75         }76     }77     #endregion78 79     #region 主人80     public class Master81     {82         private string name;83         public Master(string name, Cat cat)84         {85             this.name = name;86             cat.CatCryEvent += CatCryEventHandler;//本质上就是往委托链中添加一个方法87         }88 89         //事件处理程序90         private void CatCryEventHandler(object sender, CatCryEventArgs e)91         {92             Console.WriteLine("{0}醒了:我勒个去,叫个锤子!", name);93         }94     }95     #endregion96 97 }

Es kann durch Demo zusammengefasst werden:

1. Der Prozess zum Definieren und Verwenden von Ereignissen ist wie folgt:

2. Um Ereignisparameter zu definieren, müssen Sie EventArgs erben event EventHandler

3. Das Ereignis verwendet den Beobachtermodus mit Veröffentlichung, Abonnement und Benachrichtigung Das Wesentliche wird im Folgenden zusammengefasst.

Verwenden von Delegaten zur Implementierung

 1 namespace ConsoleApplication5 2 { 3     //声明委托 4     public delegate void Del1(); 5  6     class Program 7     { 8         static void Main(string[] args) 9         {10             //创建委托链(链式委托)11             Del1 del1 = () => Console.WriteLine("猫叫了");12             del1 += () => Console.WriteLine("老鼠逃走了:我勒个去,赶紧跑啊!");13             del1 += () => Console.WriteLine("主人醒了:我勒个去,叫个锤子!");14 15             //调用委托16             del1();17 18             Console.ReadKey();19         }20 21     }22 }

Es ist ersichtlich, dass es sich tatsächlich um einen verketteten Delegatenaufruf handelt. Dem Kettendelegaten werden drei Methoden hinzugefügt, die beim Aufruf nacheinander ausgeführt werden.

Ereignisse und Delegierte

Um die Beziehung zwischen Ereignissen und Delegierten vollständig zu verstehen, werfen wir einen Blick auf den Quellcode von EventHandler, wie unten gezeigt.

Sehen Sie die rote Markierung im Bild oben? Daher werden Veranstaltungen delegiert umgesetzt. Zusammenfassend:

Kontakt:

1. Veranstaltungen werden auf der Grundlage von Delegation durchgeführt, was im Volksmund wie folgt verstanden werden kann: Veranstaltungen sind eine besondere Art der Delegation, und zwar das Besondere Die Sache ist, dass es einen Delegaten mit zwei Parametern (Ereignisquelle und Ereignisparameter) und keinem Rückgabewert definiert.

2, Wenn ein Abonnent eines Ereignisses ein Ereignis abonniert, fügt es im Wesentlichen die Ereignisverarbeitungsmethode zur Delegationskette hinzu , wann Wenn ein Ereignis ausgelöst wird, werden alle Ereignisbehandlungsmethoden in der Delegationskette aufgerufen.

Unterschied:

Das Wesentliche eines Delegaten ist ein benutzerdefinierter Typ (Klasse), während das Wesentliche eines Ereignisses eine spezielle Delegateninstanz ist (Objekt) .

Das obige ist der detaillierte Inhalt vonFassen Sie den Zusammenhang und den Unterschied zwischen Delegation und Veranstaltungen zusammen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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