6

Ich versuche, eine benutzerdefinierte Sammlung basierend auf Stack<T> zu erstellen. Wenn ich Stack<T> [von Metadaten] in Visual Studio anschaue, zeigt es, dass Stack<T> implementiert ICollection, die es ICollectionCopyTo(Array array, index) Methode implementieren würde, aber stattdessen wird gezeigt, wie 's CopyTo(T[] array, index) Methode. Kann jemand erklären, warum das so ist?Stack <T> implementiert ICollection, hat aber Methoden von ICollection <T>

Ich versuche, eine Sammlung zu erstellen, die Stack<T> ziemlich stark nachahmt. Wenn ich ICollection als Stapel implementieren, erfordert es, dass ich die Methode CopyTo(Array array, index) verwenden, aber was ich wirklich wollen ist die CopyTo(T[] array, index) Methode, wie Stack<T> tut. Gibt es einen Weg dies zu erreichen ohne ICollection<T> zu implementieren?

+9

Die Methoden sind explizit implementiert. Explizit implementierte Methoden sind nicht öffentlich und würden daher nicht in den Metadaten angezeigt (die nur öffentliche Eigenschaften auflisten). –

+1

Sie könnten .NET Reflector versuchen, den tatsächlichen vollständigen Quellcode von 'Stack ' zu sehen, einschließlich privater Methoden. – mellamokb

+0

@JeffMercado Wow ... Ich kann nicht glauben, dass es so einfach war. Ich habe mich immer gefragt, was "Explizit Implement suchsuch" bedeutet. Vielen Dank. –

Antwort

3

Wie andere geschrieben haben, können Sie explizite Schnittstellenimplementierung verwenden, um Ihre nicht-generische Schnittstelle zu erfüllen:

void ICollection.CopyTo(Array array, int arrayIndex) 
{ 
    var arrayOfT = array as T[]; 
    if (arrayOfT == null) 
    throw new InvalidOperationException(); 
    CopyTo(arrayOfT, arrayIndex); // calls your good generic method 
} 
0

Ich denke, die Methode CopyTo(Array array, index) explizit umgesetzt. Das heißt, Sie sehen diese Methode nur, wenn Sie das Objekt als ICollection sehen:

Verwandte Themen