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
}
}
何となく少し掴めたかもしれません。