6

Stack<T>に基づいてカスタムコレクションを作成しようとしています。ビジュアルスタジオでStack<T> [メタデータから]を見ると、ICollectionが実装されており、ICollectionCopyTo(Array array, index)メソッドを実装する必要がありますが、代わりにICollection<T>CopyTo(T[] array, index)メソッドが実装されていることがわかります。誰かがなぜこれに当てはまるか説明できますか?Stack <T>はICollectionを実装していますが、ICollectionのメソッドを持っています<T>

私はとよく似たコレクションを作成しようとしています。スタックとしてICollectionを実装すると、CopyTo(Array array, index)メソッドを使用する必要がありますが、は実際にはとなります。Stack<T>のようにCopyTo(T[] array, index)メソッドを使用します。 ICollection<T>を実装せずにこれを達成する方法はありますか?他の人が書いたとおり

+9

メソッドは明示的に実装されています。明示的に実装されたメソッドはパブリックではないため、メタデータ(パブリックプロパティのみをリストする)には表示されません。 –

+1

.NET Reflectorを試して、実際の完全なソースコード 'Stack '(プライベートメソッドを含む)を見ることができます。 – mellamokb

+0

@JeffMercadoうわー...それは簡単だとは信じられません。私はいつも「そのようなものを明示的に実装する」が何を意味するのか疑問に思った。ありがとう。 –

答えて

3

、あなたは非ジェネリックインターフェイスを満たすために、明示的なインターフェイスの実装を使用することができます。

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

私は明示的に実装されているCopyTo(Array array, index)方法を推測します。これは、オブジェクトがICollectionとして表示される場合にのみ、そのメソッドが表示されることを意味します。

var collection = (ICollection)stack; 
collection.CopyTo(array, 0); 
関連する問題