カテゴリー
C

C#、ジェネリッククラスに演算子オーバーロードを使ってみました。

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<int>(200, 300);
            Console.WriteLine(testClass2.GetAns);

            var testClass3 = new TestClass<int>();
            testClass3 = testClass1 + testClass2;
            Console.WriteLine(testClass3.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 TestClass()
        {
            a = (dynamic)0;
            b = (dynamic)0;
            ans = (dynamic)0;
        }
        public T Seta {
            set
            {
                a = value;
            }
        }
        public T Setb
        {
            set
            {
                b = value;
            }
        }
        public T GetAns {
            get{
                return (dynamic)ans;
            }
        }
        public void MakeAns()
        {
            ans = (dynamic)a + (dynamic)b;
        }
        public TestClass<T> CreateAns(TestClass<T> that)
        {
            var testClass = new TestClass<T>();
            testClass.a = (dynamic)this.a + (dynamic)that.a;
            testClass.b = (dynamic)this.b + (dynamic)that.b;
            testClass.ans = (dynamic)this.ans + (dynamic)that.ans;
            return testClass;
        }

        public static TestClass<T> operator +(TestClass<T> kariobj, TestClass<T> kari)
        {
            var testClass = new TestClass<T>();
            var myGeneric = kariobj.CreateAns(kari);
            return myGeneric;
        }
    }
}

何に使えるかと言うと分かりませんが、頭の体操というか?混乱のもと作り?

コメントを残す

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

inserted by FC2 system