using System;
namespace Chapter01All
{
class GenericDemo
{
public static void Main()
{
var testClass1 = new TestClass<int>(20, 30);
testClass1.MakeAddWithDynamic();
Console.WriteLine(testClass1.GetAns());
var testClass2 = new TestClass<double>(200.2, 300.3);
testClass2.MakeAddWithDynamic();
Console.WriteLine(testClass2.GetAns());
}
}
class TestClass<T>
{
T a;
T b;
T ans;
public TestClass(T x, T y)
{
a = x;
b = y;
}
public void MakeAddWithDynamic()
{
ans = (dynamic)a + (dynamic)b;
}
public T GetAns()
{
return (dynamic)ans;
}
}
}
ネットから拾ったサンプルが複雑でした。今のとこ、理解できないので、より簡単そうな形式(dynamic)を使った方にまとめました。正確にはつかんでませんが。上の例は、複素数のクラスの例に近いように思います。ansの計算だけを変えれば、そのままではないでしょうか?
using System;
namespace Chapter01All
{
class GenericClassDemo2
{
public static void Main()
{
var testClass1 = new TestClass<int>(20, 30);
Console.WriteLine(testClass1.GetAns);
var testClass2 = new TestClass<double>(200.2, 300.3);
Console.WriteLine(testClass2.GetAns);
}
}
}
namespace Chapter01All
{
class TestClass<T>
{
T a;
T b;
T ans;
public TestClass(T x, T y)
{
a = x;
b = y;
ans = (dynamic)a + (dynamic)b;
}
public T GetAns {
get{
return (dynamic)ans;
}
}
}
}
GetAnsをプロパティに変えてみました。GetAnsはコンストラクターに入れました。a,bが決まれば、ansも決まります。ちなみに望洋先生のC++入門、では複素数クラスなのでansは在りません。