2010-10-14 56 views
2

我的以下两个声明版本的声明工作正常。代理工作无需创建实例

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,我没有not.How不上市没有1实例创建Func键代表的代码做工精细?

回答

2

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

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

4

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

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

+0

相反。我猜乔恩的意思是,第一个是第二个语法糖:),否则它是现货。 – 2010-10-14 12:32:48

+0

@Øyvind:修正,谢谢:) – 2010-10-14 12:35:09