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

请说明在 C# 中实现观察者模式的具体方式,包括涉及的关键组件、接口或类的设计,以及在实际应用中如何保证观察者与主题之间的松耦合。

编码实现技术原理C#

考察说明

考察候选人对观察者模式的理解以及能否在 C# 中正确实现。

回答思路

  1. 【回答框架 1】观察者模式定义了一对多的依赖关系,当一个对象状态改变时,所有依赖它的对象都得到通知并自动更新。在 C# 中,可以使用事件和委托实现观察者模式。
  2. 【回答框架 2】典型实现是定义主题类,内部声明事件,例如 public event EventHandler StateChanged;定义观察者类,订阅该事件。当主题状态改变时,触发事件,观察者通过事件处理器响应。
  3. 【回答框架 3】也可以使用自定义接口,如 IObserver 和 ISubject,实现更显式的模式,但事件机制更符合 C# 惯例。
  4. 【回答框架 4】在实现时需要注意事件订阅可能造成内存泄漏,应使用弱事件模式或确保取消订阅。
  5. 【关键点 1】使用事件和委托是 C# 中实现观察者模式的常见方式。
  6. 【关键点 2】事件提供了封装性,只能由内部触发,外部只能订阅和取消订阅。
  7. 【关键点 3】需要在适当时机取消订阅,以防止内存泄漏。
  8. 【易错点 1】事件订阅未取消导致内存泄漏。
  9. 【易错点 2】多线程环境下事件触发顺序和安全性问题,需要同步机制。