ジェネリック


  • 参考URL

  • 型パラメーター
List<T>
<>で囲まれた部分が型パラメータ。この場合「T」が型パラメータ。
カスタムジェネリッククラスを定義する場合、自由な名前が付けられるが、その場合「T~」にすると良い
例)
public interface ISessionChannel<TSession> { /*...*/ }
public delegate TOutput Converter<TInput, TOutput>(TInput from);
public class List<T> { /*...*/ }


  • 非ジェネリックのArrayListとジェネリックに対応したListの違い
   class ArrayListTest
   {
       public ArrayListTest()
       {
           ArrayList list1 = new ArrayList();      //この行に注目:アレイリストクラスには型の宣言は無く、追加関数により自由な型のデータを収められる
           list1.Add(12);
           //list1.Add("abcdefg");                 //この行が原因となりエラーをだしてしまう。これは実行するまで出現しない事に注意!
           list1.Add(24);
           list1.Add(48);

           int t = 12;
           foreach (int x in list1)
           {
               Console.Write((t += x) + " ");      //型の宣言が無いゆえにデータの追加で型が合わなくなり例外エラーが出る場合が出てくる
           }                                       //これは実行しないと出現しないエラーでありコンパイル前の段階でエラー検出も出来ない





           //参考例
           List<int> list2= new  List<int>();      //この行では新しくジェネリックに対応したリストクラスを使用している。<int>で型を宣言している事に注目
           list2.Add(12);
           //list2.Add("abcdef");                  //これはコンパイル前にIDEがエラーを検出し事前に実行後のエラーを防げる  ・・・つまりリスク管理しやすい
           list2.Add(24);
           list2.Add(48);

           int t2 = 12;
           foreach (var item in list2)
           {
               Console.Write((t2 += item) + " ");
           }

           /*
            * 型を事前に宣言できるゆえのリスク管理が可能なListはArrayListより安全であり
            * この事からジェネリック対応のListを使用する事が推奨されている
            */

       }
   }
最終更新:2012年04月06日 18:36