カテゴリー
C

C#、ジェック型クラスと型パラメータの制約、基本クラス制約

using System;

class Chapter01All
{
    class GenericCalcBase<T>
    {
        public T Kasan(T a, T b)
        { 
            return (dynamic)a + (dynamic)b;
        }
        public T Genzan(T a, T b)
        {
            return (dynamic)a - (dynamic)b;
        }
    }
    class MyCalcClassInt : GenericCalcBase<int> { }
    class MyCalcClassDouble : GenericCalcBase<double> { }
    class Test<T> where T : MyCalcClassInt
    {
        T obj;
        public Test(T o = null)
        {
            obj = o;
        }
    }
    class DelivedTest : GenericCalcBase<int>{ }
    static void Main()
    {
        GenericCalcBase<int> objA = new GenericCalcBase<int>();
        Console.WriteLine(objA.Kasan(100, 200));        //300

        MyCalcClassInt objB = new MyCalcClassInt();
        Console.WriteLine(objB.Kasan(500, 300));        //800

        MyCalcClassInt objC = new MyCalcClassInt();
     //  Console.WriteLine(objC.Kasan(1000.5, 2000));  //1000.5にするとエラーになる

        DelivedTest objE = new DelivedTest();
        Console.WriteLine(objE.Kasan(1001, 2002));      //3003

        Test<MyCalcClassInt> objD = new Test<MyCalcClassInt>(objB);
        Console.WriteLine(objD);    //objDからobjBにアクセスは出来ないようです。

        MyCalcClassDouble objF = new MyCalcClassDouble();
        Console.WriteLine(objF.Kasan(1.234, 10.234));   //11.468
        Console.WriteLine(objF.Genzan(1.234, 10.234));  //-9
    }
}

何となく少し掴めたかもしれません。

コメントを残す

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

inserted by FC2 system