委托无需创建实例即可工作

时间:2010-10-14 12:28:35

标签: c# process delegates

我的以下两个版本的声明工作正常。

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?

2 个答案:

答案 0 :(得分:4)

不,在这两种情况下,您都实例化了委托。只是在第一个版本中,它被方法组转换隐藏。第一种形式是第二种形式的有效语法糖。

基本上Max是方法组,方法组可以转换为任何兼容的委托类型。

答案 1 :(得分:2)

这是C#2中的一项新功能;编译器将隐式创建委托实例。

这是一种纯粹的语法糖;编译的IL是相同的。