2010-02-22 65 views
14

我試圖讓下面這個簡單的代表示例工作。根據我從它採取的一本書應該沒問題,但我得到一個Method name expected錯誤。代表:方法名稱預計錯誤

namespace TestConsoleApp 
{ 
    class Program 
    { 
     private delegate string D(); 

     static void Main(string[] args) 
     { 
      int x = 1; 

      D code = new D(x.ToString()); 

     } 
    } 
} 

任何幫助?

回答

31

刪除():

D code = new D(x.ToString); 

你想指定的方法,而不是執行它。

0

嘗試將方括號括起來,您傳遞該方法,因此不需要使用方括號。

0
D code = new D(x.ToString); // Note the:() 

您需要在考績委託要執行的方法。你正在做的是傳遞值而不是函數的簽名。

5

我想你的意思:

D code = new D(x.ToString); 

注意缺少括號。在括號開啓的情況下,這是一種方法調用 - 即您試圖在該行代碼中執行x.ToString()。沒有括號,它是一個方法組 - 一個表達式,它告訴編譯器查看具有該名稱的可用方法(在該上下文中),這正是爲了創建委託的目的。

您正在使用哪本書?如果它顯示的示例中有真正的括號,您可能需要通過電子郵件發送作者(或者至少查看本書的勘誤頁)。如果是C#的深入,我去一個角落裏哭泣......

+0

+1,再一次很好很好的解釋! :-) –

0

應該是:

D code = new D(x.ToString); 
3

你需要養活的方法到委託構造函數。

x.ToString() 

不是一種方法,而是一個字符串。使用

D code = new D(x.ToString);