2010-10-14 105 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