2013-02-19 10 views
11

zu den Implementierungsdetails gehen, sehe ich die Umsetzung der Array Klasse alsArray-Klasse Implementierung in C#

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

Implementierung der IList-Schnittstelle liest als

public interface IList : ICollection, IEnumerable 

Meine Frage ist, nicht die Array Klasse implementieren automatisch ICollection und IEnumerable in dem Moment, in dem IList implementiert? Warum werden diese explizit implementiert?

+2

Obwohl einige der Methoden des 'ICollection',' IList' und 'IStructuralComparable' als explizite Schnittstellenimplementierungen implementiert werden, die auch auf die dokumentiert MSDN-Seite für die ['Array'-Klasse] (http://msdn.microsoft.com/en-us/library/system.array.aspx). – Oded

+1

@Oded, habe ich diese [link] (http://msdn.microsoft.com/en-us/library/system.array.aspx) für die explizite Schnittstellenimplementierungen überprüft. Ich sehe explizite Implementierungen nur für die ICollection-Schnittstelle. 'IEnumerable' hat keine. – TheSilverBullet

Antwort

3

Die Implementierung von Array ist:

Array : ICloneable, IList, IStructuralComparable, IStructuralEquatable 

auf dieser Quelle Werfen Sie einen Blick in here

Vielleicht haben Sie einen Blick auf MSDN, die nur Dokument klarer.

+0

Danke für den Link zur Quelle! – TheSilverBullet

+0

Sie wollen also sagen, dass der Reflektor nur entwickelt wurde, um alle zusätzlichen Schnittstellen für Lesbarkeit zu zeigen? – TheSilverBullet

+0

@TheSilverBullet: Ja, für mehr Lesbarkeit, auf MSDN und sogar Objekt-Browser, müssen Sie auf den Code schauen, um richtig zu wissen –

1
interface I 
{ 
    void M(); 
} 

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

    } 
} 

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

    } 
} 

Sie sind frei I i = new B() zu schreiben, aber man kann nicht explizit M in B implementieren. Um das zu tun, müssen Sie BI explizit implementieren:

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

    } 
}