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に辿れたように思います。