2011-12-07 8 views
7

Tôi có một phương pháp khuyến nông trong những gì tôi sẽ gọi HelperAssembly trông tương tự như sau:Gọi một phương pháp như một phương pháp mở rộng đòi hỏi phải tham khảo nhiều hơn gọi đó là trực tiếp

public static class HelperClass 
{ 
    public static void MyHelperMethod(this SomeClass some, OtherClass other) 
    { 
     // This object is defined in OtherAssembly1 
     ObjectFromOtherAssembly1 object1 = new ObjectFromOtherAssembly1(some); 

     // This object is defined in OtherAssembly2 
     ObjectFromOtherAssembly2 object2 = new ObjectFromOtherAssembly2(other); 

     DoStuffWith(object1, object2);  
    } 
} 

Tôi có một hội đồng tôi sẽ gọi CallerAssembly có tham chiếu đến HelperAssembly.

My HelperAssembly có một tham chiếu đến cả OtherAssembly1OtherAssembly2.

SomeClass và OtherClass đều được xác định trong ReferenceAssembly. HelperAssemblyCallerAssembly có tham chiếu đến ReferenceAssembly.

Mọi thứ đều tuyệt vời khi tôi gọi phương pháp của tôi từ CallerAssembly như thế này:

HelperClass.MyHelperMethod(some, other); 

Tuy nhiên, tôi nhận được xây dựng lỗi khi tôi gọi nó như thế này (như là một phương pháp mở rộng):

some.MyHelperMethod(other); 

Các lỗi nói rằng CallerAssembly cần tham chiếu OtherAssembly1OtherAss embly2.

Tôi đang bối rối. Tôi nghĩ rằng cú pháp phương pháp mở rộng chỉ là đường cú pháp, nhưng không thực sự thay đổi cách mà mọi thứ được biên dịch.

Tôi không muốn thêm tài liệu tham khảo mà nó đang đề xuất nên tôi sẽ không thực hiện cuộc gọi dưới dạng Phương thức tiện ích mở rộng. Nhưng tôi muốn hiểu sự khác biệt là gì.

Tại sao gọi phương thức trực tiếp xây dựng tốt nhưng gọi nó là Phương thức tiện ích mở rộng không thành công?

+0

Có thể có điều gì đó bị thiếu trong mô tả của bạn, bởi vì tôi không gặp bất kỳ lỗi nào nếu tôi theo dõi nó. – muratgu

+0

Tương tự ở đây, nó biên dịch ok khi gọi phương thức như Helper và khi tôi gọi nó là phương pháp mở rộng. Bạn có thể cung cấp thêm thông tin? Đó là một lỗi thú vị. – lontivero

Trả lời

1

Bất kỳ cơ hội nào mà CallerAssembly nhắm vào cấu hình .NET Framework Client và trình trợ giúp HelperAssembly nhắm vào Khuôn khổ .NET "đầy đủ"?

Tôi đã gặp sự cố với Phương thức mở rộng (và những thứ khác) khi tôi đã thực hiện việc này.