You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET中两种委托赋值写法new AddDelegate(Add)与直接赋值Add的区别是什么

结论先行

两种写法在运行时完全等价,没有任何功能、性能差异,第二种是C#推出的语法糖,编译器会自动帮你补全第一种的显式构造逻辑。


具体差异说明

  • 第一种 AddDelegate addDelegate = new AddDelegate(Add); 是C# 1.0原生支持的显式委托实例化写法,你手动完成了委托对象的创建、方法绑定全流程。
  • 第二种 AddDelegate addDelegate = Add; 是C# 2.0新增的方法组隐式转换语法特性,只要目标方法的签名、返回值和委托定义完全匹配,编译器会自动推断并生成和第一种写法完全一致的IL代码,你可以通过反编译工具(比如ILSpy)验证这一点。

适用场景区别

日常开发中优先选择更简洁的隐式转换写法即可,只有遇到编译器无法自动推断类型的特殊场景,才需要用显式构造写法:

  • 存在多个方法重载,多个重载签名都能匹配当前委托定义,需要显式指定委托类型消除歧义
  • 部分旧版本C#中,给Lambda表达式绑定委托时编译器无法自动推断类型,需要显式构造

举个需要显式构造的常见场景示例:

// 有两个重载的Add方法
int Add(int a, int b) => a + b;
double Add(double a, double b) => a + b;

// 直接隐式转换会报错,编译器不知道匹配哪个重载
// AddDelegate addDelegate = Add; 

// 显式构造就可以明确绑定签名匹配int参数的Add方法
AddDelegate addDelegate = new AddDelegate(Add);

内容的提问来源于stack exchange,提问作者nvionnddd9

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 03:54:02