|
描述(做一个简单的记录):
事件(event)的本质是一个委托;(声明一个事件: public event TestDelegate eventTest;)
委托(delegate)可以理解为一个符合某种签名的方法类型;比如:TestDelegate委托的返回数据类型为string,参数为 int和EventPara,而TestI方法的参数和返回类型和TestDelegate一致,则可以把TestI方法赋值给委托tI;
注册事件:我在构造函数的时候注册这个事件(eventTest += delTest;)并且把触发这个事件的参数也传进来(_eventPara = e;);
触发事件:当给Number这个字段赋值时触发事件(eventTest(_number, _eventPara); ),事件被触发后TestI这个方法将被执行;
(如果此文档对你有帮助,欢迎点赞加关注,也欢迎评论互相交流)
代码如下(此代码可以直接运行,本人在vs2022运行):- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading;
- using System.Threading.Tasks;
- using System.Xml.Serialization;
- using Ttest;
- namespace _SJ.Test
- {
- internal class Program
- {
- static void Main(string[] args)
- {
- EventPara eventPara_zs = new EventPara();
- eventPara_zs.Age = 18;
- eventPara_zs.Name = "张三";
- TestDelegate tI = TestI;
- EventTest test = new EventTest(tI, eventPara_zs);
- for (int i = 1; i < 10; i++)
- {
- test.Number = i;//模拟触发一个事件; 每赋值一个值,触发一个事件
- }
- Console.WriteLine( "结束");
- Console.ReadKey();
- }
- private static string TestI(int i, EventPara e)
- {
- Console.WriteLine($"触发者:{e.Name}, 触发者的年龄:{e.Age}; 触发次数:" + i.ToString());
- return "触发"+i.ToString();
- }
-
- }
- /// <summary>
- /// 自定义的事件参数
- /// </summary>
- public class EventPara: EventArgs
- {
- public int Age { get; set; }
- public string Name { get; set; }
- }
- //声明委托
- public delegate string TestDelegate(int i, EventPara e);
- public class EventTest
- {
- /// <summary>
- /// 声明事件
- /// </summary>
- public event TestDelegate eventTest;
- /// <summary>
- /// 私有的事件参数
- /// </summary>
- private EventPara _eventPara;
- private int _number;
- public int Number {
- get { return _number; }
- set
- {
- _number = value;
- eventTest(_number, _eventPara); //触发事件
- }
- }
- /// <summary>
- /// 构造时传递一个委托和事件参数
- /// </summary>
- /// <param name="delTest"></param>
- public EventTest(TestDelegate delTest, EventPara e)
- {
- eventTest += delTest;
- _eventPara = e;
- }
- }
- }
复制代码
运行后的结果如下:
来源:https://www.cnblogs.com/SHa-Jazy/p/18169534
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|