C#之重载运算符++,-,+有案例。

您可以重定义或重载 C# 中内置的运算符。因此,程序员也可以使用用户自定义类型的运算符。重载运算符是具有特殊名称的函数,是通过关键字 operator 后跟运算符的符号来定义的。与其他函数一样,重载运算符有返回类型和参数列表。

例如,一下案例,有注释

   class Program
    {
        static void Main(string[] args)
        {
            Threed a = new Threed(1,2,3);
            Threed b = new Threed(10,10,10);
            Threed c= new Threed();

    

            Console.WriteLine("这是a:");
            a.show();
            Console.WriteLine("这是b:");
            b.show();
            c = a + b;
            Console.WriteLine("这是a+b:");
            c.show();

            //可以复合运算
            c = a + b + c;
            Console.WriteLine("这是a+b+c:");
            c.show();


            c = c - a;
            Console.WriteLine("这是c-a:");
            c.show();

            c = c - b;
            Console.WriteLine("这是c-b:");
            c.show();

            c = -a;
            Console.WriteLine("这是-a:");
            c.show();



            //重载的++ -- 和系统自定义运算规则一样
            c = a++;
            Console.WriteLine("这是c=a++");
            Console.WriteLine("c is:");
            c.show();
            Console.WriteLine("a is :");
            a.show();

            a = new Threed(1, 2, 3);
            Console.WriteLine("a is :");
            a.show();

            c = ++a;
            Console.WriteLine("c=++a");
            Console.WriteLine("c is ");
            c.show();

            Console.WriteLine("a is ");
            a.show();

            //如果支援一个参数是对象时    加法顺序的左右操作数需要和定义的重载方法的参数类型对应
            //对象+int  不能写成  int(参数)+ 对象(参数)   
            //除非下面再定义一个  int + 对象   的重载方法
            c = b + 10;
            Console.WriteLine("C=b+10");
            Console.WriteLine("c is");
            c.show();







        }
    }
    class Threed
    {
        int x, y, z;

        public Threed() {
            x = y = z = 0;
        }
        public Threed(int i, int j, int k)
        {
            x = i;y = j;z = k;
        }



        /// <summary>
        /// 重写+运算符
        /// </summary>
        /// <param name="obj1">+运算对应的左操作数</param>
        /// <param name="obj2">+运算对应的右操作数</param>
        /// <returns>Threed类型,一般的返回类型和类类型相同</returns>
        public static Threed operator +(Threed obj1,Threed obj2)
        {
            Threed res = new Threed();
            res.x = obj1.x + obj2.x;
            res.y = obj1.y + obj2.y;
            res.z = obj1.z + obj2.z;

            return res;
        }


        //重载 -运算符

        public static Threed operator -(Threed obj1, Threed obj2)
        {
            Threed res = new Threed();
            res.x = obj1.x - obj2.x;
            res.y = obj1.y - obj2.y;
            res.z = obj1.z - obj2.z;

            return res;
        }

        public void show()
        {
            Console.WriteLine(x+","+y+","+z);
        }

        //一元重载   变负数
        public static Threed operator -(Threed op)
        {
            Threed res = new Threed();
            res.x = -op.x;
            res.y = -op.y;
            res.z = -op.z;

            return res;
        }

        //++a 先自加再赋值    a++先赋值再自加
        public static Threed operator ++(Threed op)
        {

            Threed res = new Threed();
            res.x = op.x + 1;
            res.y = op.y + 1;
            res.z = op.z + 1;
            return res;
        }


        //其中必须是有一个参数和类类型相同
        public static Threed operator +(Threed op1, int op2)
        {
            Threed res = new Threed();
            res.x = op1.x + op2;
            res.y = op1.y + op2;
            res.z = op1.z + op2;
            return res;

        }



    }

结果
这是a:
1,2,3
这是b:
10,10,10
这是a+b:
11,12,13
这是a+b+c:
22,24,26
这是c-a:
21,22,23
这是c-b:
11,12,13
这是-a:
-1,-2,-3
这是c=a++
c is:
1,2,3
a is :
2,3,4
a is :
1,2,3
c=++a
c is
2,3,4
a is
2,3,4
C=b+10
c is
20,20,20

给的完整代码,可以自加跑一遍,调试一下,是怎么运行的,加深理解。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值