2009-02-28 32 views
60

thể trùng lặp:
C#: Interfaces - Implicit and Explicit implementationngầm vs giao diện thực hiện rõ ràng

một người nào đó sẽ giải thích sự khác nhau giữa hai con thú này và làm thế nào để sử dụng chúng. AFAIK, nhiều lớp pre.2.0 đã được triển khai mà không có các kiểu generic, do đó gây ra phiên bản thứ hai để thực hiện cả hai giao diện của các giao diện. Là trường hợp duy nhất tại sao người ta sẽ cần phải sử dụng chúng?

Bạn cũng có thể giải thích sâu về cách sử dụng chúng không?

Cảm ơn

Trả lời

95

There is a good and pretty detailed blog post about this.

Về cơ bản việc triển khai giao diện ngầm bạn truy cập vào các phương pháp giao diện và các tính chất như thể chúng là một phần của lớp. Với việc triển khai giao diện rõ ràng, bạn chỉ có thể truy cập chúng khi xử lý nó như giao diện đó. Nếu bạn sử dụng cái kia, đôi khi bạn phải sử dụng giao diện rõ ràng khi bạn có thuộc tính/phương thức có cùng chữ ký như giao diện hoặc bạn muốn triển khai hai giao diện có cùng chữ ký và có các cách triển khai khác nhau cho các thuộc tính/phương thức phù hợp.

Các quy tắc bên dưới là từ Brad Abrams design guidelines blog.

  • Không sử dụng các thành viên rõ ràng làm ranh giới bảo mật. Họ có thể được gọi bởi bất kỳ khách hàng nào đưa một cá thể vào giao diện.
  • Sử dụng thành viên rõ ràng để ẩn chi tiết triển khai
  • Sử dụng thành viên rõ ràng để triển khai giao diện riêng gần đúng.
  • Làm lộ một cách khác để truy cập bất kỳ thành viên được triển khai rõ ràng nào mà lớp con được phép ghi đè. Sử dụng cùng tên phương thức trừ khi xung đột phát sinh.

Nó cũng được đề cập trong các ý kiến ​​trong blog của Brad rằng có liên quan đến quyền anh khi sử dụng thực thi rõ ràng trên các loại giá trị để nhận thức được chi phí hiệu suất.

3

Có một cách khác để xem xét nó, từ chính bản thân mê cung, tại đây: http://blogs.msdn.com/cbrumme/archive/2003/05/03/51381.aspx.

Nhưng trong ngắn hạn, triển khai ngầm định cung cấp cho bạn một chuyển đổi kiểu, việc triển khai rõ ràng sẽ không thể truy cập được trừ khi đối tượng rõ ràng là loại truyền đến loại giao diện đó.

+0

Giải quyết xung đột ở đây ..... "Thực hiện Ngụ ý" - có nghĩa là thực hiện đơn giản một phương thức cụ thể có cùng tên và cùng một chữ ký thuộc cùng một lớp, trong đó có "Triển khai rõ ràng" - nghĩa là triển khai phương pháp bằng cách sử dụng Tên giao diện có cùng tên và chữ ký trong lớp cụ thể đó. –

16

Trong thuật ngữ của giáo dân, nếu một lớp kế thừa từ 2 giao diện trở lên và nếu giao diện có cùng tên phương thức, lớp sẽ không biết phương thức giao diện nào đang được triển khai nếu bạn sử dụng giao diện ngầm. Đây là một trong các tình huống khi bạn thực hiện một giao diện rõ ràng.

Implicit Interface Implementtation

public class MyClass : InterfaceOne, InterfaceTwo 
{ 
    public void InterfaceMethod() 
    { 
     Console.WriteLine("Which interface method is this?"); 
    } 
} 

interface InterfaceOne 
{ 
    void InterfaceMethod(); 
} 

interface InterfaceTwo 
{ 
    void InterfaceMethod(); 
} 

Explicit Interface Thực hiện

public class MyClass : InterfaceOne, InterfaceTwo 
{ 
    void InterfaceOne.InterfaceMethod() 
    { 
     Console.WriteLine("Which interface method is this?"); 
    } 

    void InterfaceTwo.InterfaceMethod() 
    { 
     Console.WriteLine("Which interface method is this?"); 
    } 
} 

interface InterfaceOne 
{ 
    void InterfaceMethod(); 
} 

interface InterfaceTwo 
{ 
    void InterfaceMethod(); 
} 

Các liên kết sau đây có một video tuyệt vời giải thích khái niệm này
Explicit Interface Implementation

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