C# 运算符重载

namespace Console运算符重载
{
    /// <summary>
    /// 这种写法类似于集成的计算方式,比较专业
    /// </summary>
    class Class1
    {
        public int a;
        public int a1;

        public Class1(int c, int b )
        {
            a = c;
            a1 = b;
        }

        //public Class1(double cc)
        //{
        //    a1 = cc;
        //}
        //说明:implicit 关键字隐式转换指定用在将 Class 类型转换成为 int 类型,换成 explicit 就会报错
        //public static implicit operator Class1(int d)
        //{
        //    return new Class1(d );
        //}

        //说明:explicit 关键字显式转换
        public static explicit operator int(Class1 v)
        {
            return v.a;
        }

        public static explicit operator double(Class1 v)
        {
            return v.a1;
        }


        public static Class1 operator +(Class1 laft, Class1 right)
        {
            Console.WriteLine("laft+right:");
            if (laft.a==right.a)
            {
                return new Class1(laft.a + right.a,laft.a1);
            }

            int result = laft.a * right.a1;
            int result2 = right.a * right.a1;

            return new Class1(result + result2, laft.a * right.a1);
        }

        public override string ToString()
        {
            string s = a.ToString() + "/" + a1.ToString();
            return s;
        }


    }
}

//---------------------------------------------------------

 

  class Test
    {
        static void Main(string[] args)
        {
            //Class1 clas = new Class1(44 );
            //Console.WriteLine(clas.a);
            //Class1 clas2 = new Class1(55d);
            //Console.WriteLine("clas2.a1= "+clas2.a1.ToString("0.00"));

            //装箱操作
            int age = 22;
            object o = age;
            o = "aaa";
            Console.WriteLine(o);

            //Class1 c1 = 99;
            //c1.a1 = -90;
            //Console.WriteLine("c1.a1= {0}  c1.a= {1}",c1.a1,c1.a);

            Class1 clas = new Class1(10, 10);
            Console.WriteLine("clas= "+clas.ToString());

            Class1 clas1 = new Class1(10, 10);
            Console.WriteLine("clas1= " + clas1.ToString());

            Class1 cs2 = clas + clas1;
            Console.WriteLine("cs2 = clas + clas1:{0}",cs2.ToString());

            Class1 sc3 = new Class1(14, 7);
            if (sc3==cs2)
            {
                Console.WriteLine("sc3: {0} cs2: {1}",sc3.ToString(),cs2.ToString());
            }
        }
    }

 

posted @ 2012-07-13 19:12  blog_yuan  阅读(132)  评论(0编辑  收藏  举报