2013-02-19 16 views
11

Idąc do szczegółów implementacji, widzę realizacja Array klasy jakoArray klasa implementacja w C#

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

implementacja interfejsu IList brzmi

public interface IList : ICollection, IEnumerable 

Moje pytanie brzmi, czy nie Klasa Array automatycznie implementuje ICollection i IEnumerable od momentu implementacji IList? Dlaczego są one implementowane jawnie?

+2

Choć niektóre z metod 'ICollection',' 'IStructuralComparable' IList' i są realizowane jako jawnych implementacji interfejsu, który jest również udokumentowane na Strona MSDN dla klasy ['Array'] (http://msdn.microsoft.com/en-us/library/system.array.aspx). – Oded

+1

@Oded, sprawdziłem to [link] (http://msdn.microsoft.com/en-us/library/system.array.aspx) dla jawnych implementacji interfejsu. Widzę jawne implementacje tylko dla interfejsu 'ICollection'. 'IEnumerable' nie ma żadnych. – TheSilverBullet

Odpowiedz

3

Realizacja Array jest:

Array : ICloneable, IList, IStructuralComparable, IStructuralEquatable 

Spójrz na tego źródła w here

Może przyjrzał na MSDN, które po prostu zrobić jaśniejsze dokument.

+0

Dzięki za link do źródła! – TheSilverBullet

+0

Więc chcesz powiedzieć, że reflektor został tak zaprojektowany, aby pokazać wszystkie dodatkowe interfejsy dla czytelności? – TheSilverBullet

+0

@TheSilverBullet: Tak, dla większej czytelności, w MSDN, a nawet przeglądarce obiektów, musisz spojrzeć na kod, aby wiedzieć poprawnie –

1
interface I 
{ 
    void M(); 
} 

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

    } 
} 

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

    } 
} 

Wolno napisać I i = new B(), ale nie można wdrożyć wyraźnie M w B. Aby to zrobić, trzeba B wdrożyć I wyraźnie:

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

    } 
}