カテゴリー
C

C# 型パラメータと継承が混乱してます。

using System;

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

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

        MyClassInt objC = new MyClassInt();
        Console.WriteLine(objC.Kasan(1000, 2000));      //3000

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

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

自分の場合は、継承の方が今のとこわかり易い感じがします。型パラメータの制約はスッキリしません。只記号:を使うので似ている感じもしますが、違うという意識を持った方が良い?のかもしれません。Mainの最後の行で、結構悩みました。デバッグ画面からだと、objDからobjBに辿れたように思います。

コメントを残す

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

inserted by FC2 system