翼度科技»论坛 编程开发 .net 查看内容

.net事件

1

主题

1

帖子

3

积分

新手上路

Rank: 1

积分
3
描述(做一个简单的记录):
       事件(event)的本质是一个委托;(声明一个事件: public event TestDelegate eventTest;)
    委托(delegate)可以理解为一个符合某种签名的方法类型;比如:TestDelegate委托的返回数据类型为string,参数为 int和EventPara,而TestI方法的参数和返回类型和TestDelegate一致,则可以把TestI方法赋值给委托tI;
       注册事件:我在构造函数的时候注册这个事件(eventTest += delTest;)并且把触发这个事件的参数也传进来(_eventPara = e;);
       触发事件:当给Number这个字段赋值时触发事件(eventTest(_number, _eventPara); ),事件被触发后TestI这个方法将被执行;
      (如果此文档对你有帮助,欢迎点赞加关注,也欢迎评论互相交流)

代码如下(此代码可以直接运行,本人在vs2022运行):
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading;
  6. using System.Threading.Tasks;
  7. using System.Xml.Serialization;
  8. using Ttest;
  9. namespace _SJ.Test
  10. {
  11.     internal class Program
  12.     {
  13.         static void Main(string[] args)
  14.         {
  15.             EventPara eventPara_zs = new EventPara();
  16.             eventPara_zs.Age = 18;
  17.             eventPara_zs.Name = "张三";
  18.             TestDelegate tI = TestI;
  19.             EventTest test = new EventTest(tI, eventPara_zs);
  20.             for (int i = 1; i < 10; i++)
  21.             {
  22.                 test.Number = i;//模拟触发一个事件;  每赋值一个值,触发一个事件
  23.             }
  24.             Console.WriteLine( "结束");
  25.             Console.ReadKey();            
  26.         }
  27.         private static string TestI(int i, EventPara e)
  28.         {
  29.             Console.WriteLine($"触发者:{e.Name}, 触发者的年龄:{e.Age}; 触发次数:" + i.ToString());
  30.             return "触发"+i.ToString();
  31.         }
  32.          
  33.     }
  34.     /// <summary>
  35.     /// 自定义的事件参数
  36.     /// </summary>
  37.     public class EventPara: EventArgs
  38.     {
  39.         public int Age { get; set; }
  40.         public string Name { get; set; }
  41.     }
  42.     //声明委托
  43.     public delegate string TestDelegate(int i, EventPara e);
  44.     public class EventTest
  45.     {
  46.         /// <summary>
  47.         /// 声明事件
  48.         /// </summary>
  49.         public event TestDelegate eventTest;
  50.         /// <summary>
  51.         /// 私有的事件参数
  52.         /// </summary>
  53.         private EventPara _eventPara;
  54.         private int _number;
  55.         public int Number {
  56.             get { return _number; }
  57.             set
  58.             {
  59.                 _number = value;
  60.                 eventTest(_number, _eventPara); //触发事件
  61.             }
  62.         }
  63.         /// <summary>
  64.         /// 构造时传递一个委托和事件参数
  65.         /// </summary>
  66.         /// <param name="delTest"></param>
  67.         public EventTest(TestDelegate delTest, EventPara e)
  68.         {
  69.             eventTest += delTest;
  70.             _eventPara = e;
  71.         }
  72.     }
  73. }
复制代码
  
 
运行后的结果如下:

 

来源:https://www.cnblogs.com/SHa-Jazy/p/18169534
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具