2013-08-02 32 views
5

Tôi đang sử dụng dll API của bên thứ ba, SAPB của Bloomberg cho những người biết/có quyền truy cập vào nó.Làm cách nào để ẩn phương pháp?

Dưới đây là vấn đề của tôi:

[ComVisible(true)] 
public interface IDisposable  
{ //this is from mscorlib 2.0.0.0 - standard System.IDisposable 
    void Dispose(); 
} 

public abstract class AbstractSession : IDisposable {}//method signatures and comments 

public class Session : AbstractSession {} //method signatures and comments (from assembly metadata) 

Tất cả những điều trên là từ F12/Tới duyệt định nghĩa/đối tượng trong VS2010. Bây giờ khi tôi cố gắng và sử dụng mã này:

(new Session()).Dispose(); 

này không biên dịch ... tiêu chuẩn lỗi biên dịch - không có phương pháp/mở rộng định nghĩa 'Vứt' có thể được tìm thấy.

Làm thế nào điều này có thể xảy ra ??? Họ đã thực hiện một hội đồng và chỉnh sửa một cách rõ ràng siêu dữ liệu của nó?

Tôi không biết nếu nó có thể hợp pháp để ẩn (để loại trừ) một phương pháp nào ....

Trả lời

16

này được gọi là explicit interface implementation. Các lớp được viết như sau:

class Session : IDisposable { 
    void IDisposable.Dispose() { 
     // whatever 
    } 
} 

Bạn chỉ có thể gọi nó là nếu biến của bạn là loại IDisposable, như:

IDisposable mySession = new Session(); 
mySession.Dispose(); 

Hoặc bằng phương pháp đúc:

((IDisposable)mySession).Dispose(); 

Hoặc với một using tuyên bố, tự động gọi số Dispose khi hoàn thành (điều này chỉ dành riêng cho IDisposable và thường là phương pháp hay nhất để xử lý đối tượng y triển khai giao diện này):

using (var session = new Session()) { } 
+0

Aaarrgggh! tốt đẹp. Tôi chưa bao giờ sử dụng các triển khai rõ ràng nên không biết rằng bạn cần một dàn diễn viên để sử dụng nó. Cảm ơn ! – Vivek

+0

Triển khai giao diện rõ ràng thường không cần thiết, nhưng có một số khi nó đẹp, như khi bạn muốn buộc các nhà phát triển đồng nghiệp của bạn mã hóa bằng giao diện thay vì triển khai. Và đôi khi cần thiết, giống như khi bạn cần triển khai hai giao diện khác nhau có chữ ký thành viên giống hệt nhau mà bạn cần thực hiện hai cách khác nhau. –

+0

Yup. Cảm ơn. Như bạn đã đề cập, bạn hiếm khi cần phải sử dụng rõ ràng trừ khi tên phương pháp đang xung đột, vì vậy đây là lần đầu tiên tôi thấy điều này trong mã sản xuất. Tự hỏi những gì đụng độ với DISPOSE! :) – Vivek

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