2010-07-16 31 views
6

Chỉ cần tò mò về cách .NET CLR xử lý các giao diện nội bộ?Làm thế nào để .Net CLR thực hiện một "Giao diện" nội bộ?

Q1] Chuyện gì xảy ra khi CLR gặp cái gì đó như: (. Cùng sử dụng dưới đây)

simple interface example.

interface ISampleInterface 
    { 
     void SampleMethod(); 
    } 

    class ImplementationClass : ISampleInterface 
    { 
     // Explicit interface member implementation: 
     public void SampleMethod() 
     { 
      // Method implementation. 

     } 

     static void Main() 
     { 
      //Declare an interface instance. 
      ISampleInterface mySampleIntobj = new ImplementationClass(); // (A) 
      // Call the member. 
      mySampleIntobj.SampleMethod(); 

      // Declare an interface instance. 
      ImplementationClass myClassObj = new ImplementationClass(); // (B) 
      //Call the member. 
      myClassObj.SampleMethod(); 

     } 
    } 

Q2: Trong ví dụ trên như thế nào là (A)(B) được phân biệt?

Q3: Có phải Generic Interfaces được xử lý khác nhau không?

(Cảm thấy giống như một noob khi đặt câu hỏi cơ bản như thế này ... anyways ....)

Thx all.

+0

vì nó chỉ là một phần câu trả lời tôi sẽ để nó ở đây. Để bắt đầu với mã của bạn mySampleIntobj.SampleMethod(); và myClassObj.SampleMethod(); có thể gọi hai phương pháp khác nhau. Người đầu tiên sẽ gọi bất kỳ phương thức thực hiện rõ ràng nào khớp với cuộc gọi, thứ hai sẽ không thực hiện. chỉ trong trường hợp không có phương thức kết hợp rõ ràng, chúng sẽ gọi cùng phương thức –

+0

Điều này có biên dịch không? AFAIK, bạn nên có một 'SampleMethod()' công khai cho cuộc gọi (B). – Humberto

+0

oh yes sorry..edited/correct now :) thx :) – Amitd

Trả lời

2

Thực tế không có sự khác biệt trong các bit mã đó. Cả hai kết thúc lên gọi cùng một chức năng. Có thể có những lợi ích hiệu suất nhỏ trong việc gọi phương thức thông qua loại lớp.

Nếu bạn muốn các công cụ này được triển khai như thế nào, hãy xem Virtual Method Tables.

Để biết thêm thông tin, hãy xem this.

+0

wow liên kết thứ 2 có vẻ rất khó khăn để nắm bắt :) – Amitd

+0

không sau khi đọc nó 10 lần. –

+0

đọc nó ba lần và vẫn không nhận được nó :) ..i tiếp tục cố gắng;) – Amitd

-5

Sử dụng giao diện trong khi tạo tham chiếu đối tượng được coi là thực hành tốt hơn so với trực tiếp instanciating nó với một loại lớp. Điều này đi kèm theo lập trình cho một nguyên tắc giao diện.

Điều này có nghĩa là bạn có thể thay đổi lớp bê tông thực hiện cùng một giao diện trong thời gian chạy bằng cách sử dụng một cái gì đó như tiêm phụ thuộc hoặc thậm chí có thể được phản ánh. Mã của bạn sẽ không được yêu cầu thay đổi nếu bạn lập trình cho một giao diện so với lập trình cho một loại cụ thể.

+0

Điều này có vẻ giải thích tốt hơn về lập trình cho một giao diện http://stackoverflow.com/questions/1848442/what-exactly-is-interface-based-programming – Amitd

+0

Chủ yếu là đúng, nhưng ngoài chủ đề. Không trả lời câu hỏi. Đã bỏ phiếu. –

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