2010-04-20 59 views
6

我很困惑,爲什麼這個編譯:爲什麼沒有參數的委託會被編譯?

private delegate int MyDelegate(int p1, int p2); 

    private void testDelegate() 
    { 
     MyDelegate imp = delegate 
     { 
      return 1; 
     }; 
    } 

MyDelegate應該是一個指針,它有兩個int參數並返回另一個整型,正確的方法?爲什麼我可以分配一個不帶參數的方法?

有趣的是,這些不編譯(它抱怨簽名不匹配,因爲我期望)

private void testDelegate() 
    { 
     // Missing param 
     MyDelegate imp = delegate(int p1) 
     { 
      return 1; 
     }; 

     // Wrong return type 
     MyDelegate imp2 = delegate(int p1, int p2) 
     { 
      return "String"; 
     }; 
    } 

感謝您的幫助!

瑞安

回答

5

好了,第一樣品中的編譯器可以很容易地看到,沒有參數使用,替代了幾個假人。

這看起來像一個設計決策,從指定,一切都在.NET 1道路上的某個地方,通過匿名方式在.NET 2 lambda表達式中的.Net 3

6

你的第一個例子是短手語法,如果代表不需要參數。如果你甚至需要其中一個,你需要全部提供,這就是爲什麼第二個例子的第一部分不能編譯的原因。

+0

非常感謝您的回答;這很有道理。我把上面的那個標記爲「正確的」,只是因爲它首先到達那裏。謝謝! – Ryan 2010-04-20 21:49:05