.net事件

news/2024/10/15 4:23:16

描述(做一个简单的记录):
       事件(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;}}
}

  

 

运行后的结果如下:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/26586.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

学习如何分享

3、访问以下链接,下载工具:①打开可执行文件;②将XML文件拖动到窗口中,回车。https://files-cdn.cnblogs.com/files/codealone/博客采集工具.zip此时,开始自动将一篇文章设为一个html文件(博客采集工具\cnblogs):3、访问以下链接,下载工具:①打开可执行文件;②将XML…

海亮杯总结

写在前面: 100+100+30+0+20+20=270,rnk42,超级菜 你说的对,但是《第三届“海亮杯”》是由海亮教育集团自主研发的一款全新开放世界冒险游戏。游戏发生在一个被称作「浙江省诸暨海亮高级中学」的幻想世界,在这里,被神选中的人将被授予「正方形巧克力」,导引「数位和」之力…

力扣-83. 删除排序链表中的重复元素

1.题目 题目地址(83. 删除排序链表中的重复元素 - 力扣(LeetCode)) https://leetcode.cn/problems/remove-duplicates-from-sorted-list/ 题目描述 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。示例 1:输入:head = …

SAP 事务代码CU71报错 - 特性LOBM_LWEDT不存在 -

SAP 事务代码CU71报错 - 特性LOBM_LWEDT不存在 -1, 在事务代码CU71或者如下配置里。定义排序规则,试图使用SAP标准特性LOBM_LWEDT, SAP报错说:’特性LOBM_LWEDT不存在’。这是SAP系统上的一个标准的特性,怎么能不存在SAP系统上呢?2,解决方法:执行事务代码BMSM或者进入如下…

SAP S4HANA 2023 PCE系统上的SCC1?

SAP S4HANA 2023 PCE系统上的SCC1?在S/4 HANA 2023 PCE 系统上执行事务代码SCC1, 系统提示:”传输工具的旧副本已弃用,新的传输复制工具可用,是否继续执行新事务代码SCC1N?”. 点击按钮’是’, 系统进入如下界面:输入TR号码,输入源客户端,执行,进入如下结果界面,注:…

day29-JavaScript(1)

1、JavaScript 的历史 1.1、JavaScript 的历史 JavaScript 因为互联网而生,紧随着浏览器的出现而问世。回顾它的历史,就要从浏览器的历史讲起。 1990年底,欧洲核能研究组织(CERN)科学家Tim Berners-Lee,在全世界最大的电脑网络——互联网的基础上,发明了万维网(World W…

M3位带地址映射和汇编实现对比

01. 位带概述位带操作简单的说,就是把每个比特膨胀为一个 32 位的字,当访问这些字的时候就达到了访问比特的目的,比如说 GPIO 的 ODR 寄存器有 32 个位,那么可以映射到 32 个地址上,我们去访问这 32 个地址就达到访问 32 个比特的目的。这样我们往某个地址写 1 就达到往对…

Spring配置相关

SpringSpring技术是JavaEE开发必备技能,企业开发技术选型命中率>90% 专业角度简化开发:降低企业级开发的复杂性 框架整合:高效整合其他技术,提高企业级应用开发与运行效率初识Spring 了解Spring家族Spring官网:https://spring.io/ Spring发展到今天已经形成了一种开发的…