首页 > 分享 > C#/.NET 当我们在写事件 += 和

C#/.NET 当我们在写事件 += 和

最新推荐文章于 2024-01-09 14:02:19 发布

walter lv 于 2019-12-30 08:27:43 发布

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

当我们在写 += 和 -= 事件的时候,我们会在 += 或 -= 的右边写上事件处理函数。我们可以写很多种不同的事件处理函数的形式,那么这些形式都是一样的吗?如果你不注意,可能出现内存泄漏问题。

本文将讲解事件处理函数的不同形式,理解了这些可以避免编写代码的时候出现内存相关的问题。

本文内容 典型的事件处理函数 变种事件处理函数 编译器类型转换 不是同一个委托实例 `+=` `-=` 是怎么做的 `-=`

典型的事件处理函数

事件处理函数本质上是一个委托,比如 FileSystemWatcher 的 Changed 事件是这样定义的:

// 这是简化的代码。 public event FileSystemEventHandler Changed; 12

这里的 FileSystemEventHandler 是一个委托类型:

public delegate void FileSystemEventHandler(object sender, FileSystemEventArgs e); 1

一个典型的事件的 += 会像下面这样:

void Subscribe(FileSystemWatcher watcher) { watcher.Changed += new FileSystemEventHandler(OnChanged); } void OnChanged(object sender, FileSystemEventArgs e) { } 12345678910

+= 的右边传入的是一个 new 出来的委托实例。

变种事件处理函数

除了上面直接创建的目标类型的委托之外,还有其他类型可以放到 += 的右边:

// 方法组。 watcher.Changed += OnChanged; 12

// Lambda 表达式。 watcher.Changed += (sender, e) => Console.WriteLine(e.ChangeType); 12

// Lambda 表达式。 watcher.Changed += (sender, e) => { // 事件引发时,代码会在这里执行。 }; 123456

// 匿名方法。 watcher.Changed += delegate (object sender, FileSystemEventArgs e) { // 事件引发时,代码会在这里执行。 }12345

相关知识

C#/.NET 当我们在写事件 += 和
C#(asp.net) 宠物领养系统
基于C#制作一个桌面宠物代码
基于WPF的桌面宠物开发(一) :WPF简介+环境搭建+简单界面
本科毕设基于微信小程序的宠物寄养交流平台小程序源码.rar
AppHarbor和爪爪哪个好
鱼虾类食物,有的肾脏病人自觉不吃,认为对肾不好,其实,此类食物为优质蛋白,在有过敏性疾 的翻译是: 中文翻译英文意思,翻译英语
当我们关注宠物情绪时,我们在售卖什么?
面对虐待动物事件,我们还能做些什么?
今天我开始学习:PETSHOP3.0宠物商店(经典案例)

网址: C#/.NET 当我们在写事件 += 和 https://m.mcbbbk.com/newsview276337.html

所属分类:萌宠日常
上一篇: 平均完成定额率=( )÷产量定额
下一篇: 行为检测