.net事件

描述(做一个简单的记录):
       事件(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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
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;
        }
    }
}

  

 

运行后的结果如下:

 

posted @   二维一加零  阅读(160)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
点击右上角即可分享
微信分享提示