• C#操作符的重载


    我们知道,在C#中,所有数据要么属于某个类,要么属于某个类的实例,充分体现了面向对象的思想。因此,为了表达上的方便,人们希望可以重新给已定义的操作符赋予新的含义,在特定的类的实例上进行新的解释。这就需要通过操作符重载来解决。 使用成员方法重载操作符 C#操作符重载总是在类中进行声明,并且通过调用类的成员方法来实现。 操作符重载声明的格式为:

     type operator operator-name(formal-param-list)  C#操作符重载可以实现的有:

     + - ! ~ ++ -- true false 

    * / % & | ^ << >> == != > < >= <=  但也有一些操作符是不允许进行重载的,如:

     =,&&,||,?:,new,typeof,sizeof,is  C#操作符重载之一元操作符重载 顾名思义,一元操作符重载时操作符只作用于一个对象,此时参数表为空,当前对象作为操作符的单操作数。 下面我们举一个角色游戏中经常遇到的例子。扮演的角色具有内力、体力、经验值、剩余体力、剩余内力五个属性,每当经验值达到一定程序时,角色便会升级,体力、内力上升,剩余体力和内力补满。“升级”我们使用重载操作符“++”来实现。 C#操作符重载程序:  C#操作符重载之二元操作符重载

      using System;  

      class Player  

     {  

      public int neili; 

      public int tili;  

      public int jingyan;  

      public int neili_r;  

       public int tili_r;  

      public Player()  

      {  

        neili=10;  

        tili=50;  

        jingyan=0;  

         neli_r=50;  

         tili_r=50;  

      }  

      public static Player operator ++(Player p){  

        p.neili=p.neili+50;  

        p.tili=p.tili+100;  

        p.neili_r=p.neili;  

        p.tili_r=p.tili;  

       return p;  

      }  

      public void Show()  

       {  

       Console.WriteLine("Tili:{0}",tili);  

       Console.WriteLine("Neili:{0}",neili);  

       Console.WriteLine("Tili_full:{0}",tili_r);  

       Console.WriteLine("Neili_full:{0}",neili_r);  

       }  

     }  

     class Test  

      {  

      public static void Main(){  

         Player man=new Player();  

         man.Show();  

         man++;  

         Console.WriteLine("Now upgrading...:");  

         man.Show();  

      }   

     }

    大多数情况下我们使用二元操作符重载。这时参数表中有一个参数,当前对象作为该操作符的左操作数,参数作为操作符的右操作数。 下面我们给出二元操作符重载的一个简单例子,即笛卡儿坐标相加。 C#操作符重载程序:

     using System;  

     class DKR  

     {  

        public int x,y,z;  

       public DKR(int vx,int vy,int vz){  

           x=vx;  

         y=vy;  

          z=vz;  

       }  

       public static DKR operator +(DKR d1,DKR d2)  

       {  

       DKR dkr=new DKR(0,0,0);  

        dkr.x=d1.x+d2.x;  

       dkr.y=d1.y+d2.y;  

       dkr.z=d1.z+d2.z;  

       return dkr;  

       }  

     }  //C#操作符重载

     class Test  

     {  

       publixc statixc void Main(){  

          DKR d1=new DKR(3,2,1);  

          DKR d2=new DKR(0,6,5);  

         DKR d3=d1+d2;  

         Console.WriteLine("The 3d 

     location of d3 is:{0},{1},{2}",d3.x,d3.y,d3,z);  

       }    

     } 

  • 相关阅读:
    .NET正则基础之——平衡组
    网站架构探索负载均衡的方式
    Sql2005 全文索引详解
    构架师之路(4) 里氏代换原则(Liskov Substitution Principle, LSP)
    Ubuntu 9.04 server安装nginx+php(fastcgi)
    构架师之路(2) 开闭原则(OpenClosed Principle,OCP)
    SQL Server中常用全局变量介绍
    构架师之路(3) 1 IoC理论的背景
    linux ubuntu 命令集合
    理解nginx 和 php(fastcgi)的关系
  • 原文地址:https://www.cnblogs.com/woshilulin/p/3724350.html
Copyright © 2020-2023  润新知