C# 委托与事件——从观察者模式说起

摘要:​ 解析 C# 中委托(Delegate)和事件(Event)的关系,以及它们在设计模式中的应用。

在重构一个旧的后台服务时,我又一次用到了委托。对于初学者来说,委托就像是一个“函数指针”,但在 C# 中它更加安全和强大。

什么是委托?

委托是一种类型,它定义了方法的签名。可以将任何具有兼容签名的方法分配给该委托实例。

csharpcsharppublic delegate void PrintString(string s);

事件的应用

事件是基于委托封装的,主要目的是为了封装安全性,防止外部随意重置委托链。

在观察者模式中,Subject(主题)维护一个 Observer(观察者)列表,当状态变化时通知它们。在 C# 中,这天然可以通过 event关键字实现:

csharpcsharppublic class Publisher {
    public event EventHandler<EventArgs> OnDataChanged;
    
    protected virtual void DataChanged() {
        OnDataChanged?.Invoke(this, EventArgs.Empty);
    }
}

合理使用 event可以让代码结构更加清晰,降低模块间的耦合度。

类似文章