Tôi sẽ không thảo luận xem bạn có thể xây dựng Mặt tiền của riêng bạn xung quanh lớp bên thứ ba đó hay không. Tác giả trước đó là đúng, thư viện có thể được thiết kế theo cách mà sẽ không cho phép điều này. Giả sử họ có một số lớp kết hợp có bộ đơn nên được khởi tạo theo thứ tự cụ thể hoặc như thế này - có thể có rất nhiều lỗi thiết kế (hoặc tính năng) mà nhà phát triển bên thứ 3 không bao giờ quan tâm, bởi vì họ không cho rằng bạn sẽ sử dụng thư viện của họ theo cách đó.Nhưng OK, giả sử rằng việc xây dựng một mặt tiền không phải là một nhiệm vụ không thể, và thực tế bạn chỉ có một vấn đề - có quá nhiều phương pháp bạn phải viết trình bao bọc xung quanh và không tốt để làm điều này bằng tay.
Tôi thấy 3 giải pháp để giải quyết một cách chính xác rằng vấn đề
1) Tôi giả sử rằng mới loại "năng động" của .NET 4.0 sẽ cho phép bạn để workaround vấn đề đó mà không cần phải viết "mẫu mã" Bạn nên incapsulate một thể hiện của lớp bên thứ 3 vào lớp của bạn như là một thành viên privare với từ khóa động Lớp của bạn nên được bắt nguồn từ Dynamic hoặc triển khai thực hiện giao diện IDynamicObject. Bạn sẽ phải thực hiện các chức năng/SetMember GetMember mà sẽ chuyển tiếp các cuộc gọi tới dụ đóng gói của lớp bên thứ 3
Vâng, C# 4.0 là một tương lai, Hãy xem trên các giải pháp khác:
2) Đừng viết mã theo cách thủ công nếu bạn có số lượng đáng kể các phương thức công khai (nói nhiều hơn 100). Tôi sẽ viết một ứng dụng giao diện điều khiển nhỏ sử dụng sự phản chiếu và tìm tất cả các thành viên công cộng và sau đó tự động tạo mã để gọi cá thể đóng gói. Ví dụ:
public type MethodName(params)
{
this.anInstanceOf3rdPartyClass.MethodName(params);
}
3) Bạn có thể làm tương tự như 2, nhưng với sự trợ giúp của các công cụ phản chiếu hiện có, ví dụ RedGate .NET Reflector. Nó sẽ giúp bạn liệt kê tất cả các lớp và phương thức chữ ký. Sau đó, dán tất cả điều này vào Word và macro VB đơn giản sẽ cho phép bạn tạo mã giống như bạn có thể làm trong 2. Lưu ý: Ngay khi bạn không sao chép mã, nhưng chỉ sao chép chữ ký phương thức, có sẵn công khai , Tôi không nghĩ rằng bạn sẽ vi phạm thỏa thuận cấp phép, nhưng dù sao cũng đáng để kiểm tra lại
Nguồn
2009-06-17 08:53:11
Phần một: http://blogs.msdn.com/ericlippert/archive/2008/09/26/preventing-third-party-derivation-part-one.aspx –
Phần thứ hai: http: //blogs.msdn .com/ericlippert/archive/2008/10/06/prevent-third-party-derivation-part-two.aspx –