前田稔(Maeda Minoru)の超初心者のプログラム入門
/************************************************/ /*★ generics を使った加算メソッド 前田 稔 ★*/ /************************************************/ using System; class Class1 { public static int Main() { Console.WriteLine("int ans= " + TestGeneric(10, 20)); Console.WriteLine("float ans= " + TestGeneric(1.25f, 3.125f)); Console.WriteLine("double ans= " + TestGeneric(12.3, 4.56)); Console.WriteLine("string ans= " + TestGeneric("300", "400")); Console.ReadLine(); return 0; } public static string TestGeneric<T>(T n1, T n2) { return Convert.ToString((Convert.ToDouble(n1) + Convert.ToDouble(n2))); } } |
制約を使用する理由 ジェネリック リストの項目をチェックして、その項目が有効であるかどうかを確認したり、他の項目と比較したりする場合は、 コンパイラが呼び出す必要がある演算子やメソッドが、クライアント コードで指定される可能性があるすべての型引数で サポートされるというある程度の保証をコンパイラに与える必要があります。 この保証が、ジェネリック クラス定義に 1 つ以上の制約を適用することで得られます。 たとえば、基本クラス制約では、この型のオブジェクトまたはこの型から派生したオブジェクトだけが型引数として使用される ことをコンパイラに伝えます。 この保証が得られると、コンパイラは、その型のメソッドをジェネリック クラス内で呼び出すことを許可できます。 制約は、where コンテキスト キーワードを使用して適用します。 基本クラス制約を適用することによって、「ジェネリックの概要 (C# プログラミング ガイド)」 の GenericList<T> クラスに追加できる機能を次のコード例に示します。
public static string TestGeneric<T>(T n1, T n2) { return Convert.ToString((Convert.ToDouble(n1) + Convert.ToDouble(n2))); } |