Ereignisse bieten Klassen und Klasseninstanzen die Möglichkeit, Benachrichtigungen an die Außenwelt zu senden und so die Kommunikation zwischen Objekten zu realisieren. Wenn ein Ereignismitglied definiert ist, bedeutet dies, dass der Typ 1 hat. Die Möglichkeit, Methoden im Ereignis zu registrieren (+ = Operatorimplementierung). 2. Möglichkeit, die Registrierung von Methoden in Ereignissen aufzuheben (-= Operatorimplementierung). 3. Die registrierte Methode wird benachrichtigt, wenn das Ereignis ausgelöst wird (eine Liste der registrierten Methoden wird intern im Ereignis verwaltet). Der Delegierte ist der Träger des Ereignisses. Um ein Ereignis zu definieren, müssen Sie einen Delegierten haben. Für weitere Informationen zur Delegation klicken Sie bitte auf „Delegieren“, um mehr zu erfahren.
Ereignis deklarieren:
Um ein Ereignis innerhalb einer Klasse zu deklarieren, müssen Sie zunächst den Delegate-Typ des Ereignisses deklarieren. Zum Beispiel:
pulic delegate void MyDelegateHandler(object sender,EventArgs e);
Deklarieren Sie dann basierend auf dem obigen Beispiel das Ereignis und verwenden Sie das Schlüsselwort event
pulic event MyDelegateHandler MyEvent;
(Der Objekttyp ist die Basisklasse aller Klassen , über ihn Wie bereits erwähnt, klicken Sie auf den Objekttyp, um mehr zu erfahren. EventArgs ist die Basisklasse der Klasse, die Ereignisdaten enthält und zur Übergabe von Ereignisdetails verwendet wird.
Schreiben Sie eine Ereignisbeispiel:
Ich habe die unerschütterliche Angewohnheit, jeden Samstag in einen Supermarkt vor der Schule zu gehen, um Dinge einzukaufen, die sich öffnet, wenn wir uns einer bestimmten Entfernung (3 Meter) nähern. . Sie öffnet sich automatisch und sagt sehr sanft und herzlich „Willkommen“. Da ich oft zu ihm nach Hause gehe, um Dinge zu kaufen, und mich als Mitglied angemeldet habe, scheint mich die automatische Tür jedes Mal zu erkennen, wenn ich mich nähere, und sagt sehr „Herzlich willkommen“. Herzlich willkommen. HC666 kommt in unseren Supermarkt ^_^“ Diese Tür macht ziemlich viel Spaß.
Im obigen Beispiel wird die „automatische Tür“ als ein von Door instanziiertes Objekt betrachtet, und „I“ ist ein instanziiertes Objekt Wenn ich die Aktion „Zum Supermarkt gehen“ aufrufe und 3 Meter vom Supermarkteingang entfernt bin, wird das von uns definierte „Enterdoor“-Ereignis ausgelöst. Allerdings verwendet Enterdoor einen Delegierten, um eine „Opendoor“ zu registrieren „Automatische Tür (Tür)“. „Die Aktion entspricht dem Aufruf der Türöffnungsmethode und erreicht so die Kommunikation und den Austausch zwischen Objekten. Der Code lautet wie folgt:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Test { //定义一个person类,里面包含了方法 class person { public string name = "HC666"; private int distance; //声明委托 public delegate void EnterdoorHandler(object sender,EnterdoorArgs e); //基于委托声明事件 public event EnterdoorHandler Enterdoor; //定义的一个去超市的方法,当距离 distance<=3的时候触发事件 public void GotoStore() { for (int i = 6; i > 0; i--) { distance = i; if (i <= 3) {//触发事件了 EnterdoorArgs e = new EnterdoorArgs(distance); OnEnterdoor(e);//调用触发事件方法 } } } public void OnEnterdoor(EnterdoorArgs e) {//调用事件里注册的方法 if (Enterdoor != null) Enterdoor(this, e); else Console.WriteLine("没有添加处理方法"); } //定义一个包含事件数据的类,这里distance是一个判断的重要数据 public class EnterdoorArgs:EventArgs { public int distance; public EnterdoorArgs(int distance) { this.distance = distance; } } } //定义门这个类 class Door {//定义开门的方法 public void Opendoor(object sender, person.EnterdoorArgs e) { person per = (person)sender; //有点熟悉吧,显示类型转换中有谈到 if (e.distance == 3) { Console.WriteLine("尊敬的顾客您距离本超市 {0}米 即将开门迎接您", e.distance); } if(e.distance <3) Console.WriteLine("热烈欢迎 {0} 光临本超市", per.name); } } class program { static void Main(string[] args) { person per = new person(); //实例化对象 Door door = new Door(); //向事件中注册开门的方法 per.Enterdoor += door.Opendoor; //我去超市 per.GotoStore(); } } }
Ergebnis:
Das Obige ist der Inhalt von C# Learning Diary 24----Event. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!