17.C# —— 事件
2026/6/5 20:27:08 网站建设 项目流程

目录

一、事件基础概念

1. 系统默认事件:EventHandler

二、自定义参数事件实战:计算器加法完成事件

三、知识点总结


一、事件基础概念

事件依托委托实现,遵循发布 - 订阅设计模式

  1. 发布方:类内部声明事件,满足业务条件时触发事件;
  2. 订阅方:外部通过+=绑定处理方法、-=取消订阅;
  3. 关键特性:被event修饰,不能直接用=赋值覆盖全部订阅,相比普通多播委托更安全。

1. 系统默认事件:EventHandler

.NET 内置EventHandler委托,固定签名void 方法(object sender, EventArgs e),适用于无自定义参数的事件。

namespace _3事件 { internal class Program { //语法:event + 委托类型 + 事件名称 public static event EventHandler MyClick; static void Main(string[] args) { //绑定普通方法 MyClick += new EventHandler(F1); //绑定Lambda表达式 MyClick += (sender, e) => { Console.WriteLine("lambda表达式"); }; //触发执行事件 MyClick?.Invoke(null,null); } static void F1(object sender,EventArgs s) { Console.WriteLine("F1方法"); } } }

二、自定义参数事件实战:计算器加法完成事件

需求:计算器执行加法完毕后触发事件,订阅端获取两个加数与运算和。实现三步:自定义委托 → 基于委托定义事件 → 业务方法中安全触发事件

namespace _4例子 { //发布类:定义委托、事件、加法逻辑 public class Calc { //1.自定义委托,匹配事件处理方法参数格式 public delegate void AddDel(int a, int b, int sum); //2.声明事件 public event AddDel Finished; public void Add(int a,int b) { int sum = a + b; //3.空安全触发事件:非空才调用 Finished?.Invoke(a,b,sum); } } //订阅端 internal class Program { static void Main(string[] args) { Calc c = new Calc(); //订阅:+=绑定事件回调方法 c.Finished += F1; c.Add(10, 20); c.Add(30, 20); } //事件回调方法 static void F1(int a,int b,int c) { Console.WriteLine($"a的值为{a},b的值为{b},c的值为{c}"); } } }

三、知识点总结

  1. 事件 =event+ 委托类型,是封装后的安全委托;
  2. 绑定解绑:只能+=订阅、-=退订,禁止外部=清空;
  3. 两种事件写法:内置EventHandler(固定参数)、自定义委托(自定义参数);
  4. 触发规范:使用事件名?.Invoke()做空判断,避免空引用异常。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询