ジェネリック (Generic)

ジェネリックとはアルゴリズムの再利用を可能とする機能で、C++のテンプレートに代わるものです。C++ テンプレートと C# ジェネリックの違い | MSDN

ジェネリックの利点

  • 型の安全性 (タイプセーフティ)
  • コードの記述の簡易化
  • パフォーマンスの向上
  • ソースコードの保護

コレクションでの利用

ジェネリックはおもにコレクションで利用されています。

コレクション インターフェイス (Collection interface)

ジェネリックなインターフェイスと、ジェネリックではないインターフェイスの対応
ジェネリック ジェネリック ではない
IList<T> IList
IDictionary<TKey,TValue> IDictionary
ICollection<T> ICollection
IEnumerator<T> IEnumerator
Enumerable<T> IEnumerable
IComparer<T> IComparer
IComparable<T> IComparable

コレクション クラス (Collection Class)

ジェネリックなクラスと、ジェネリッではないクラスの対応
  ジェネリック ジェネリック ではない
リスト List<T> ArrayList
キーと値のコレクション Dictionary<TKey,TValue> Hashtable
キーで並べ替えられた、キーと値のコレクション SortedDictionary<T> SortedList
後入れ先出し (LIFO) のコレクション Stack<T> Stack
先入れ先出し (FIFO) のコレクション Queue<T> Queue
ダブルリンク リスト LinkedList<T> ---
System.Collections.Generic 名前空間 | MSDN

ジェネリック クラス

class MyClass <T>
{
}
ジェネリック クラス - C# プログラミング ガイド | Microsoft Docs

ジェネリック メソッド

void Method<T>(T val)
{
}
ジェネリック メソッド - C# プログラミング ガイド | Microsoft Docs

ジェネリック修飾子 (Generic Modifier)

共変性と反変性 (C#) | Microsoft Docs

in

型パラメータが反変 (contravariance) であることを示し、指定の型よりも弱い派生型を使用できるようになります。in (ジェネリック修飾子) - C# リファレンス | Microsoft Docs

interface Sample<in A> {}

out

型パラメータが共変 (covariance) であることを示し、指定の型よりも強い派生型を使用できるようになります。out キーワード (ジェネリック修飾子) - C# リファレンス | Microsoft Docs

interface Sample<out A> {}

参考

参考書

MSDN (Microsoft Developer Network) から検索