Array implementiert IList..?



  • Ich habe gerade gelesen dass die Klass Array IList implementiert weswegen ich auf einem beliebigen Array ja theoretisch Add() oder Insert() aufrufen können müsste. Das geht natürlich nicht. Normale Arrays haben ja schließlich eine feste Größe. Aber warum geht das nicht?

    int[] array = new int[4];
    array.Insert(1, 43); // Kompilierfehler
    
    IList list = (IList)array;
    list.Insert(1, 43); // NotSupportedException
    

    Hier (http://bytes.com/topic/c-sharp/answers/232869-system-array-inherits-ilist) hab ich in der ersten Antwort herausgelesen dass die implementierten Member nicht öffentlich sein müssen, aber das ist doch der Sinn von Interfaces, oder? Irgendetwas muss ich falsch verstanden haben.



  • In C# gibt es die Möglichkeit eine Interface-Methode (bzw. Eigenschaft oder Ereignis) explizit oder implizit zu deklarieren: http://blogs.msdn.com/b/mhop/archive/2006/12/12/implicit-and-explicit-interface-implementations.aspx
    Bei Array sind also diese IList-Member explizit deklariert.



  • Danke für den guten Artikel. Das klärt die Frage. 🙂



  • Gibt es eigetnlich einen guten Grund warum Array dann überhaupt IList implementiert? Es ist ja eher IEnumerable, aber offenbar nicht IList...

    MfG SideWinder


  • Administrator

    SideWinder schrieb:

    Gibt es eigetnlich einen guten Grund warum Array dann überhaupt IList implementiert? Es ist ja eher IEnumerable, aber offenbar nicht IList...

    IList - MSDN schrieb:

    Represents a non-generic collection of objects that can be individually accessed by index.

    IList<T> - MSDN schrieb:

    Represents a collection of objects that can be individually accessed by index.

    Und kein anderes Interface bietet dies an. Die Frage müsste also eher lauten, wieso gibt es nicht nicht sowas wie IIndexableCollection ? Und dazu wüsste ich nichts, aber ich nehme mal an, man wollte nicht zig tausend Interfaces für jede einzelne Funktion erstellen 🙂

    Grüssli


Log in to reply