2010-02-22 39 views
14

Tôi đang cố gắng làm ví dụ Delegate đơn giản sau đây hoạt động. Theo một cuốn sách tôi đã lấy nó từ nó phải là ok, nhưng tôi nhận được một lỗi Method name expected.Đại biểu: Tên lỗi dự kiến ​​của phương thức

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

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

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

     } 
    } 
} 

Mọi trợ giúp?

Trả lời

31

Tháo():

D code = new D(x.ToString); 

Bạn muốn định phương pháp, không thực hiện nó.

0

Hãy thử lấy dấu ngoặc vuông ở cuối phương thức, bạn đang chuyển phương thức, do đó không cần sử dụng dấu ngoặc vuông.

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

Bạn cần pas phương pháp được thực hiện trong các đại biểu. Những gì bạn đang làm là chuyển giá trị thay vì chữ ký của hàm.

5

Tôi nghĩ bạn có nghĩa là:

D code = new D(x.ToString); 

Lưu ý việc thiếu dấu ngoặc đơn. Với các dấu ngoặc bật, đó là phương thức gọi - tức là bạn đang cố thực hiện x.ToString() trong dòng mã đó. Không có dấu ngoặc đơn, đó là nhóm phương pháp - một biểu thức cho trình biên dịch xem xét các phương thức có sẵn với tên đó (trong ngữ cảnh đó), chính xác cho mục đích tạo đại biểu.

Bạn đang sử dụng sách nào? Nếu nó thực sự có dấu ngoặc trong các ví dụ nó cho thấy, bạn có thể muốn gửi email cho tác giả (hoặc ít nhất là kiểm tra trang errata của cuốn sách). Nếu đó là C# in x, tôi sẽ đi và khóc trong một góc ...

+0

+1, một lần nữa giải thích tốt và tốt! :-) –

0

nên là:

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

Bạn cần để nuôi một phương pháp vào các nhà xây dựng đại biểu.

x.ToString() 

không phải là phương pháp, nhưng là một chuỗi. Sử dụng

D code = new D(x.ToString); 
Các vấn đề liên quan