当前位置: 首页 > news >正文

【C#补全计划】事件

一、事件的概念

1. 事件是基于委托的存在,是委托的安全包裹,让委托的使用更具有安全性

2. 事件是一种特殊的变量类型

二、事件的使用

1. 语法:event 委托类型 事件名;

2. 使用:

        (1)事件是作为成员变量存在与类中

        (2)委托怎么用,事件就怎么用

3. 事件与委托的区别:事件不能在类外部赋值和调用

4. 只能作为成员变量存在与类和接口以及结构体中

5. 代码:

using System;namespace Event
{class Program{static void Main(string[] args){Test test = new Test();// 委托可以在外部赋值test.action = fun;test.action += fun;test.action -= fun;// 事件不能在外部赋值// test.myEvent = fun(); 编译报错:事件不能在外部赋值test.myEvent += fun; // 但是可以添加、移除函数test.myEvent -= fun;// 委托可以在外部调用test.action.Invoke();// 事件不能在外部调用// test.myEvent.Invoke(); 编译报错:事件不能在外部调用test.doEvent(); // 但是可以在内部封装调用}static void fun(){Console.WriteLine("调用fun()");}}class Test{// 创建委托成员变量,用于存储函数public Action action;// 创建事件成员变量,用于存储函数public event Action myEvent;public void doEvent(){Console.WriteLine("调用doEvent()");if(myEvent != null)myEvent.Invoke();}}
}

运行结果如下:

三、事件的作用

1. 防止外部随意置空委托

2. 防止外部随意调用委托

3. 事件相当于对委托进行了一次封装,使其更加安全

http://www.dtcms.com/a/333097.html

相关文章:

  • 【C#】 GridControl与GridView、容器和视图
  • Spring事务 概念 配置 隔离级别 脏读幻读不可重复读 传播行为
  • pyinstaller-从安装到高级使用
  • align-content 设置侧轴上的子元素的排列方式(多行)
  • Git代码版本管理
  • OpenCV---getStructuringElement 结构元素获取
  • 设计心得——如何架构选型
  • ffmpeg 安装、配置与使用完全指南
  • 自学大语言模型之Transformer的Tokenizer
  • jenkins 自动部署
  • 开发Chrome/Edge插件基本流程
  • mysql中in 和 exists 区别
  • 从传感器到大模型:Jetson Thor + LLM.VLA + Holoscan 的边缘推理全链路实战
  • 基于改进Apriori算法的Web文档聚类方法研究(一)
  • 20250815给ubuntu22.04.5的系统缩小/home分区
  • Doris FE 应急恢复手册:六大经典故障场景与解决方案
  • WITRAN:基于改进的RNN时间序列预测模型
  • rent8 安装部署教程之 Windows
  • Effective C++ 条款43:学习处理模板化基类内的名称
  • 俄罗斯信封套娃问题-二维最长递增子序列
  • 【JavaEE】多线程 -- 线程安全
  • UI-TARS-Desktop 深度解析:下一代智能自动化桌面平台
  • Stagehand深度解析:从开源自动化工具到企业级RPA平台的演进之路
  • 神经网络 小土堆pytorch记录
  • nVidia Tesla P40使用anaconda本地重编译pytorch3d成功加载ComfyUI-3D-Pack
  • 基于多分类的工业异常声检测及应用
  • 微信小程序 拖拽签章
  • C语言基础00——基本补充(#define)
  • useEffect 和 useLayoutEffect 执行时机
  • 【补充】数据库中有关系统编码和校验规则的简述