2013-02-19 43 views
11

Going to the chi tiết thực hiện, tôi thấy việc thực hiện Array lớp nhưMảng lớp thực hiện trong C#

public abstract class Array : ICloneable, IList, ICollection, IEnumerable, IStructuralComparable, IStructuralEquatable 

Thực hiện giao diện IList đọc như

public interface IList : ICollection, IEnumerable 

Câu hỏi của tôi là, không những Array lớp sẽ tự động triển khai ICollectionIEnumerable thời điểm nó triển khai IList? Tại sao chúng được triển khai một cách rõ ràng?

+2

Mặc dù một số phương pháp của 'ICollection',' IList' và 'IStructuralComparable' được thực hiện như việc triển khai giao diện rõ ràng, đó cũng là tài liệu trên Trang MSDN cho lớp ['Array'] (http://msdn.microsoft.com/en-us/library/system.array.aspx). – Oded

+1

@Oded, tôi đã kiểm tra [link] này (http://msdn.microsoft.com/en-us/library/system.array.aspx) để triển khai giao diện rõ ràng. Tôi thấy các triển khai rõ ràng chỉ dành cho giao diện 'ICollection'. 'IEnumerable' không có. – TheSilverBullet

Trả lời

3

Việc thực hiện các mảng là:

Array : ICloneable, IList, IStructuralComparable, IStructuralEquatable 

Hãy xem trên nguồn này trong here

Có lẽ bạn đã xem trên MSDN mà chỉ làm cho tài liệu rõ ràng hơn.

+0

Cảm ơn bạn đã liên kết tới nguồn! – TheSilverBullet

+0

Vì vậy, bạn có nghĩa là để nói rằng các phản xạ chỉ được thiết kế để hiển thị tất cả các giao diện bổ sung cho dễ đọc? – TheSilverBullet

+0

@ TheSilverBullet: Có, để dễ đọc hơn, trên MSDN và thậm chí cả Trình duyệt đối tượng, bạn phải xem mã để biết chính xác –

1
interface I 
{ 
    void M(); 
} 

class A : I 
{ 
    void I.M() 
    { 

    } 
} 

class B : A 
{ 
    void I.M() // Compilation error 
    { 

    } 
} 

Bạn có thể tự do viết I i = new B(), nhưng bạn không thể thực hiện một cách rõ ràng M trong B. Để làm được điều đó, bạn cần B để thực hiện một cách rõ ràng I:

class B : A, I 
{ 
    void I.M() // Is ok now. 
    { 

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