前置知识: C#

委托与事件底层原理

00:00
1 min Advanced 2026/6/14

C#委托与事件底层原理详解。

1. 委托本质

delegate int MyDelegate(string s);

编译继承 System.MulticastDelegate

class MyDelegate : MulticastDelegate {
    public extern int Invoke(string s);
    public extern IAsyncResult BeginInvoke(string s, AsyncCallback cb, object state);
    public extern int EndInvoke(IAsyncResult result);
}

2. 多播委托

MyDelegate d1 = s => s.Length;
MyDelegate d2 = s => int.Parse(s);
MyDelegate combined = d1 + d2;  // InvocationList 包含两个委托

3. 事件本质

public event EventHandler<string> OnMessage;

编译为:

private EventHandler<string> _onMessage;
public event EventHandler<string> OnMessage {
    add => Delegate.Combine(ref _onMessage, value);
    remove => Delegate.Remove(ref _onMessage, value);
}

4. 委托 vs 事件

特性委托事件
外部调用可以不可以
外部赋值可以不可以
+= / -=可以可以
封装

知识检测

学习进度

-- 已学文档
--% 知识覆盖率

学习推荐

专注模式