Les événements fournissent aux classes et aux instances de classe la possibilité d'envoyer des notifications au monde extérieur, réalisant ainsi la communication entre les objets. Si un membre d'événement est défini, cela signifie que le type a 1. La possibilité d'enregistrer des méthodes dans l'événement (=. mise en œuvre de l'opérateur). 2. Possibilité de désenregistrer des méthodes dans les événements (-= implémentation de l'opérateur). 3. La méthode enregistrée sera notifiée lorsque l'événement est déclenché (une liste des méthodes enregistrées est conservée en interne dans l'événement). Le délégué est le porteur de l'événement. Pour définir un événement, vous devez avoir un délégué. Pour plus d’informations sur la délégation, veuillez cliquer sur Déléguer pour en savoir plus.
Déclarer un événement :
Pour déclarer un événement à l'intérieur d'une classe, vous devez d'abord déclarer le type de délégué de l'événement. Par exemple :
pulic delegate void MyDelegateHandler(object sender,EventArgs e);
Ensuite, sur la base de l'exemple ci-dessus, déclarez l'événement et utilisez le mot-clé event
pulic event MyDelegateHandler MyEvent;
(Le type d'objet est la classe de base de toutes les classes , à propos de lui Comme mentionné précédemment, cliquez sur le type d'objet pour en savoir plus. EventArgs est la classe de base de la classe contenant les données d'événement, utilisée pour transmettre les détails de l'événement)
Écrivez un. exemple d'événement. :
J'ai une habitude inébranlable tous les samedis, j'aime aller dans un supermarché à l'extérieur de l'école pour faire des achats. Ce supermarché a une porte automatique qui s'ouvre lorsqu'on s'approche d'une certaine distance (3 mètres). . Elle s'ouvre automatiquement et dit "Bienvenue" très doucement et cordialement. Parce que je vais souvent chez lui pour acheter des choses et que je me suis inscrit en tant que membre, la porte automatique semble me reconnaître à chaque fois que je m'approche et dit très chaleureusement. chaleureusement. HC666 vient dans notre supermarché ^_^" Cette porte est assez amusante.
Dans l'exemple ci-dessus, la "porte automatique" est considérée comme un objet instancié par Door, et "I" est un objet instancié. par personne. , lorsque j'appelle l'action "aller au supermarché" et que je me trouve à 3 mètres de l'entrée du supermarché, l'événement "Enterdoor" que nous avons défini est déclenché. Cependant, Enterdoor utilise un délégué pour enregistrer une "porte ouverte" pour un. "porte automatique (porte)". "L'action équivaut à appeler la méthode d'ouverture de porte, réalisant ainsi la communication et l'échange entre les objets. Le code est le suivant :
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(); } } }
Résultat :
Ce qui précède est le contenu du C# Learning Diary 24----Event Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !