カテゴリー
C

独習C#第3版、P482 ジェネリック 基本クラス制約を使用する

using System;

class Chapter01All
{
    class GenericSample<T>
    {
        public T Kasan(T a, T b)
        {
            a = (dynamic)a + (dynamic)b;
            return a;
        }
        public T Genzan(T a, T b)
        {
            a =(dynamic)a - (dynamic)b;
            return a;
        }
        public T Kakezan(T a, T b)
        {
            a = (dynamic)a * (dynamic)b;
            return a;
        }
        public T Warizan(T a,  T b)
        {
            a =(dynamic)a / (dynamic)b;
            return a;
        }
    }
    class MyClassInt : GenericSample <int>{ }
    class MyClassDouble : GenericSample<double> { }
    class MyClass : GenericSample<int> { }
    class Test<T> where T : MyClass
    {
        T obj;
        public Test( T o)
        {
            obj = o;
        }
    }
    

    
    static void Main()
    {
        GenericSample<int> obj = new GenericSample<int>();
        int a = 100; int b = 200;
        Console.WriteLine(obj.Kasan(a,  b));        //300

        GenericSample<double> objA = new GenericSample<double>();
        double c = 100.01; double d = 200.02;
        Console.WriteLine(objA.Kakezan(c, d));      //20004.0002

        MyClassInt objB = new MyClassInt();
        Console.WriteLine(objB.Genzan(500, 400));   //100

        MyClassDouble objD = new MyClassDouble();
        Console.WriteLine(objD.Warizan(200.2, c));  //2.00179982 

        MyClass objE = new MyClass();
        Console.WriteLine(objE.Kasan(100, 200));    //300

        Test<MyClass> t1 = new Test<MyClass>(objE); 
        Console.WriteLine(t1);    //Chaper01All+Test'1[Chapter01All+MyClass]
    
    }
}

GenericSampleクラスは、ジェネリッククラスでint型とdouble型を取ります。実行のコードの最後の部分が理解できなくて、途中半端になってますが、実行自体はできます。t1インスタンからKasanを実行する方法が出来ないのか?暫く悩んでます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

inserted by FC2 system