我的以下两个版本的声明工作正常。
1) Func<int,int,int> findMax=Max;
Console.WriteLine("Max={0}",findMax(10,20));
2)Func<int,int,int> findMax=new Func<int,int,int>(Max);
Console.WriteLine("Max={0}",findMax(10,20));
,其中
public static T Max<T>(T a, T b) where T:IComparable
{
if (a.CompareTo(b) > 0) return a;
else return b;
}
在清单2中,我实例化了委托,但在清单1中我没有。如果没有创建Func委托的实例,代码如何适用于清单1?
答案 0 :(得分:4)
不,在这两种情况下,您都实例化了委托。只是在第一个版本中,它被方法组转换隐藏。第一种形式是第二种形式的有效语法糖。
基本上Max
是方法组,方法组可以转换为任何兼容的委托类型。
答案 1 :(得分:2)
这是C#2中的一项新功能;编译器将隐式创建委托实例。
这是一种纯粹的语法糖;编译的IL是相同的。