C#面试题更新 2026-08-03

在C#面向对象编程中,委托(delegate)和事件(event)各自扮演什么角色?它们如何支持回调机制和发布-订阅模式?

考察说明

考查对C#委托与事件在面向对象设计中的作用及两者关系的理解

回答思路

  1. 【回答框架 1】委托是一种类型安全的函数指针,用于封装方法引用,支持回调机制,使方法可作为参数传递,实现松耦合。
  2. 【回答框架 2】事件基于委托构建,提供发布-订阅模式,允许对象在状态变化时通知其他对象,同时封装委托,仅允许外部订阅或取消,不能直接调用。
  3. 【回答框架 3】委托支持多播(组合多个方法),而事件封装了委托的调用权限,防止外部直接触发,增强封装性和安全性。
  4. 【回答框架 4】在面向对象中,委托常用于实现回调、异步操作和事件驱动,事件则用于解耦生产者和消费者,如UI控件的事件处理。
  5. 【回答框架 5】区别:委托可任意实例化和调用,事件受限于+=和-=操作,只能在声明类内部触发,确保外部无法伪造事件。
  6. 【关键点 1】委托是类型安全的函数指针,支持多播和作为参数传递。
  7. 【关键点 2】事件基于委托,提供发布-订阅的封装,限制外部触发。
  8. 【关键点 3】事件减少耦合,增强封装性,是回调的更高层抽象。
  9. 【易错点 1】混淆委托与事件,误认为事件可以直接调用。
  10. 【易错点 2】忽略事件只能由声明类触发,外部无法invoke。
  11. 【易错点 3】误以为委托调用是同步阻塞,忽略异步委托的可能性。