カテゴリー
C

C#、ジェック型クラスのdynamicを使った演算

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は在りません。

コメントを残す

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

inserted by FC2 system