2010-04-20 62 views
6

Tôi đang bối rối tại sao điều này biên dịch:Tại sao đại biểu không có tham số biên dịch?

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

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

MyDelegate phải là một con trỏ đến một phương pháp mà có hai tham số int và trả về int khác, phải không? Tại sao tôi được phép gán một phương thức không có tham số?

Điều thú vị là những không biên dịch (nó than phiền về sự sai lệch chữ ký, như tôi mong đợi)

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

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

Nhờ sự giúp đỡ!

Ryan

Trả lời

5

Vâng, trong mẫu đầu tiên trình biên dịch có thể dễ dàng thấy rằng không có thông số nào được sử dụng và thay thế một vài núm vú giả.

này trông giống như một quyết định thiết kế, ở đâu đó trên đường từ chỉ định tất cả mọi thứ trong .NET 1, thông qua phương pháp vô danh trong .NET 2 đến lambdas trong Net 3

6

ví dụ đầu tiên của bạn là cú pháp ngắn tay nếu đại biểu không cần tham số. Nếu bạn cần ngay cả một trong số họ, bạn cần phải cung cấp cho họ tất cả, đó là lý do tại sao phần đầu tiên của ví dụ thứ hai sẽ không biên dịch.

+0

Cảm ơn rất nhiều câu trả lời của bạn; nó có ý nghĩa tốt. Tôi đánh dấu một ở trên là "chính xác" chỉ đơn giản bởi vì nó đã có đầu tiên. Cảm ơn bạn! – Ryan

Các vấn đề liên quan