generics の基礎

C# で generics(総称性)を使ったメソッドを定義します。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プログラムの説明

  1. C# の generics(総称性)は C++ の template に相当する機能ですが、書き方は簡単でも使い勝手は今一です。 (^_^;)
    C++ の template は template 関数入門 を参照して下さい。
    /*********************************/
    /*★ Generics 入門     前田 稔 ★*/
    /*********************************/
    using System;
    
    class Print
    {
        public static int Main()
        {
            int     d1;
            d1= 10;
            Disp(d1);
    
            float   f1;
            f1= 12.34f;
            Disp(f1);
            Console.ReadLine();
            return 0;
        }
    
        static void Disp<T>(T n1)
        {
            Console.WriteLine("n1={0}", n1);
        }
    }
    
  2. 今二個の int 型引数をパラメータにして、大きい方の値をリターンする関数 Max を定義します。
    int  Max(int n1, int n2)
    {
        if (n1>n2)  return n1;
        return n2;
    }
    
    この関数を float 型で使うには、本体は同じで型だけが異なる次のような関数が必要です。
    float  Max(float n1, float n2)
    {
        if (n1>n2)  return n1;
        return n2;
    }
    
    このようなとき、型の問題を一挙に解決してくれるのが generics メソッドです。
    generics メソッドを使うと関数の型や引数の型を呼び出し側の型に合わせてくれます。
  3. generics を使った Disp() メソッドです。
    <T> で呼び出し側から渡された型を T で受け取ります。
    T はこのような時に良く使われる文字(名前)で、キーワードではありません。
    渡される引数は一個(T n1)で、どのような型にも対応します。
    元々 Console.WriteLine() は、どのような型にも対応しているので generics を使う必要は無いのですが、使い方の簡単なサンプルプログラムと思って下さい。
        static void Disp<T>(T n1)
        {
            Console.WriteLine("n1={0}", n1);
        }
        
  4. 呼び出し側は次のようになります。
    最初に int で、次に float で呼んでみました。
        public static int Main()
        {
            int     d1;
            d1= 10;
            Disp(d1);
    
            float   f1;
            f1= 12.34f;
            Disp(f1);
            Console.ReadLine();
            return 0;
        }
        

超初心者のプログラム入門(C# Frame Work)