/ POST
← Back to blog
2026.03.20

C# 委托与事件深入解析

## 委托与事件 委托(Delegate)和事件(Event)是 C# 中非常重要但也容易混淆的概念。 ### 委托是什么? 委托是方法的类型安全引用。你可以把它理解为"方法的变量"。 ```csharp // 定义委托 public delegate void DamageHandler(int damage); // 使用委托 public class Player : MonoBehaviour { public DamageHandler OnTakeDamage; void TakeDamage(int dmg) { OnTakeDamage?.Invoke(dmg); } } ``` ### 事件是什么? 事件是在委托基础上添加了一层保护,外部只能 += 和 -=,不能直接 Invoke。 ```csharp public class Player : MonoBehaviour { public event DamageHandler OnTakeDamage; // event 关键字 void TakeDamage(int dmg) { OnTakeDamage?.Invoke(dmg); // 只能在类内部调用 } } // 外部代码 player.OnTakeDamage += ShowDamageUI; // 可以 // player.OnTakeDamage.Invoke(10); // 编译错误! ``` ### Action 和 Func C# 提供了内置的泛型委托,不需要自己声明: - `Action`:无返回值的方法 - `Action`:有参数无返回值 - `Func`:有返回值的方法 - `Func`:有参数有返回值 ### 总结 委托和事件是 C# 解耦代码的利器,Unity 中的 UI 按钮点击、碰撞检测等大量使用了事件机制。