回答編集履歴
1
誤字修正
answer
CHANGED
@@ -3,13 +3,13 @@
|
|
3
3
|
> Iteratorパターンと.NetにあるListやGeneric機能の違いが分かりません。
|
4
4
|
|
5
5
|
Iteratorパターンは、「要素を枚挙するためのインターフェース」を定義し、このインターフェースを継承したコンテナの要素を枚挙する場合は常に同じ使い方(インターフェース)でできるようにするという考え方です。
|
6
|
-
|
6
|
+
Genericsは、異なる型でも同じアルゴリズムで取り扱えるケースについて「型」をバラメータとして与えることで、異なる型に対して同じアルゴリズムを適用させるための仕組みです。
|
7
7
|
|
8
|
-
つまり、Iteratorパターンはインターフェースを共通化することで使い方を統一するという考え方で、
|
8
|
+
つまり、Iteratorパターンはインターフェースを共通化することで使い方を統一するという考え方で、Genericsは実装をなんども書かなくて良くする仕組みです。
|
9
9
|
|
10
10
|
さて、List<T>には両方が使われてますね。
|
11
11
|
IEnumerable<T>が「要素を枚挙するためのインターフェース」のC#における実装です。これを継承しているので、Listを使う人はIEnumerable<T>インターフェースに従ってList内の要素を枚挙できます。
|
12
|
-
また、List<T>はT型のデータを保持できます。追加/削除等のアルゴリズムは型Tが異なっても同じアルゴリズムで対応できるので
|
12
|
+
また、List<T>はT型のデータを保持できます。追加/削除等のアルゴリズムは型Tが異なっても同じアルゴリズムで対応できるのでGenericsで実装されてます。
|
13
13
|
|
14
|
-
IEnumerable<T>インターフェースを継承している
|
14
|
+
IEnumerable<T>インターフェースを継承しているGenericsクラスで良く使われるものにDictionary<TKey, TValue>もありますね。List<T>とDictionary<TKey, TValue>ではデータの使い方が異なるので同じアルゴリズムで実装できないため、異なるGenericsクラスで実装されてます。
|
15
15
|
しかし、使う人はListを使う時と同じ方法で要素を枚挙できます。
|