66.事件的本质

  1. 66.事件的本质
    1. 66.1 题目
    2. 66.2 深入解析
    3. 66.3 答题示例
    4. 66.4 关键词联想

66.事件的本质


66.1 题目

C#中事件的本质是什么?


66.2 深入解析

理解了委托的本质后,再看事件就会清晰很多。

在类中声明事件时,其本质是对委托的一种私有访问限制封装——事件的底层依然是委托,但编译器会对用event关键字修饰的委托成员做特殊处理,以此限制外部对委托的直接操作。

具体来说,这些编译时的特殊处理包括:

  1. 生成一个私有委托变量(作为事件的底层存储,外部无法直接访问);
  2. 自动添加两个事件访问器(addremove),仅允许外部通过+=-=操作来订阅/取消订阅事件;
  3. 禁止外部类对事件执行直接赋值(=)、调用(Invoke)或修改内部委托链等操作,确保事件的封装性和安全性。

简单讲,事件就是“受限制的委托”:通过封装限制了外部对委托的直接操控,只暴露必要的订阅/取消接口,更符合面向对象的封装原则。


66.3 答题示例

“在 C# 中,事件(event)的本质就是对委托的一层封装和访问控制:

  • 底层依然是委托System.MulticastDelegate),存储了一条或多条回调方法链;

  • 使用 event 关键字时,编译器会:

    1. 为该事件生成一个私有的委托字段,外部无法直接访问;
    2. 自动生成 add/remove 访问器,只允许外部通过 +=-= 来订阅或取消订阅;
    3. 禁止外部通过 = 赋值或直接 Invoke,仅能由声明该事件的类来触发(保证封装与安全)。

因此,事件就是“受限的多播委托”,既享有委托的回调能力,又防止了外部随意改写或触发,提高了封装性和可靠性。”


66.4 关键词联想

  • 受限委托(Restricted Delegate)
  • 私有存储字段
  • add / remove 访问器
  • += / -= 订阅
  • 事件触发(Invoke/Raise
  • 封装与安全性
  • 多播事件


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏