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

请解释 C# 中委托链与多播委托的概念,并结合示例说明它们的创建方式、调用顺序以及典型的应用场景。

考察说明

考察对 C# 委托机制中多播委托和委托链的理解,包括创建、调用和实际应用。

回答思路

  1. 【回答框架 1】委托链是多个委托实例按顺序链接形成的链,多播委托则是通过 += 操作符将多个方法绑定到同一个委托实例上,调用时会按添加顺序依次执行。
  2. 【回答框架 2】在 C# 中,委托类型继承自 MulticastDelegate,其内部维护一个调用列表,每个元素对应一个方法。使用 += 添加方法,使用 -= 移除方法。
  3. 【回答框架 3】调用多播委托时,会同步执行所有绑定的方法。如果某个方法抛出异常,后续方法将不会执行,这是需要注意的时序问题。
  4. 【回答框架 4】多播委托常用于事件机制、消息广播等场景,例如多个订阅者响应同一事件。
  5. 【关键点 1】多播委托通过 += 操作符绑定多个方法,调用时按顺序执行。
  6. 【关键点 2】委托链是运行时动态构建的,支持运行时添加和移除方法。
  7. 【关键点 3】多播委托的返回值为最后一个方法的返回值,若需获取每个返回值需手动遍历 GetInvocationList。
  8. 【关键点 4】所有委托隐式继承自 MulticastDelegate,即使单一方法也是多播委托的特例。
  9. 【易错点 1】使用多播委托时,若中间某个方法抛出异常,后续方法不会执行,需谨慎处理。
  10. 【易错点 2】多播委托的返回值只保留最后一个方法的返回值,容易误解为所有方法返回值的聚合。
  11. 【易错点 3】手动移除委托时,如果方法是通过匿名方法或 lambda 表达式绑定的,则无法直接移除。