C#操作符重载学习的一点总结

开发 后端
C#操作符重载是如何实现的呢?C#操作符重载是如何执行的呢?那么本文就向你介绍这方面的内容。

C#操作符重载问题的提出

在面向对象的程序设计中,自己定义一个类,就等于创建了一个新类型。类的实例和变量一样,可以作为参数传递,也可以作为返回类型。

C#操作符重载问题比如对于两个整型变量,使用算术操作符可以简便地进行算术运算:

  1. class A  
  2. {  
  3.  public int x;  
  4.  public int y;  
  5.  public int Plus{  
  6.     return x+y;  
  7.   }  

C#操作符重载问题再比如,我们希望将属于不同类的两个实例的数据内容相加:

  1. class B  
  2. {  
  3.   public int x;  
  4. }  
  5. class Test  
  6. {  
  7.  public int z;  
  8.  public static void Main{  
  9.     A a=new A();  
  10.     B b=new B();  
  11.     z=a.x+b.x;  
  12.  }  

使用a.x+b.x这种写法不够简洁,也不够直观。更为严重的问题是,如果类的成员中声明时使用的不是publixc修饰符的话,这种访问就是非法的。

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

使用成员方法重载操作符

C#操作符重载总是在类中进行声明,并且通过调用类的成员方法来实现。

操作符重载声明的格式为:

  1. type operator operator-name(formal-param-list) 

C#操作符重载可以实现的有:

  1. + - ! ~ ++ -- true false 
  2.  
  3. * / % & | ^ << >> == != > < >= <= 

但也有一些操作符是不允许进行重载的,如:

  1. =,&&,||,?:,new,typeof,sizeof,is 

C#操作符重载之一元操作符重载

顾名思义,一元操作符重载时操作符只作用于一个对象,此时参数表为空,当前对象作为操作符的单操作数。

下面我们举一个角色游戏中经常遇到的例子。扮演的角色具有内力、体力、经验值、剩余体力、剩余内力五个属性,每当经验值达到一定程序时,角色便会升级,体力、内力上升,剩余体力和内力补满。“升级”我们使用重载操作符“++”来实现。

C#操作符重载程序:

  1. using System;  
  2. class Player  
  3. {  
  4.  public int neili;  
  5.  public int tili;  
  6.  public int jingyan;  
  7.  public int neili_r;  
  8.  public int tili_r;  
  9.  public Player()  
  10.  {  
  11.    neili=10;  
  12.    tili=50;  
  13.    jingyan=0;  
  14.    neli_r=50;  
  15.    tili_r=50;  
  16.  }  
  17.  public static Player operator ++(Player p){  
  18.    p.neili=p.neili+50;  
  19.    p.tili=p.tili+100;  
  20.    p.neili_r=p.neili;  
  21.    p.tili_r=p.tili;  
  22.    return p;  
  23.  }  
  24.  public void Show()  
  25.  {  
  26.   Console.WriteLine("Tili:{0}",tili);  
  27.   Console.WriteLine("Neili:{0}",neili);  
  28.   Console.WriteLine("Tili_full:{0}",tili_r);  
  29.   Console.WriteLine("Neili_full:{0}",neili_r);  
  30.  }  
  31. }  
  32. class Test  
  33. {  
  34.  public static void Main(){  
  35.     Player man=new Player();  
  36.     man.Show();  
  37.     man++;  
  38.     Console.WriteLine("Now upgrading...:");  
  39.     man.Show();  
  40.  }  

C#操作符重载之二元操作符重载

大多数情况下我们使用二元操作符重载。这时参数表中有一个参数,当前对象作为该操作符的左操作数,参数作为操作符的右操作数。

下面我们给出二元操作符重载的一个简单例子,即笛卡儿坐标相加。

C#操作符重载程序:

  1. using System;  
  2. class DKR  
  3. {  
  4.   public int x,y,z;  
  5.   public DKR(int vx,int vy,int vz){  
  6.      x=vx;  
  7.      y=vy;  
  8.      z=vz;  
  9.   }  
  10.   public static DKR operator +(DKR d1,DKR d2)  
  11.   {  
  12.   DKR dkr=new DKR(0,0,0);  
  13.   dkr.x=d1.x+d2.x;  
  14.   dkr.y=d1.y+d2.y;  
  15.   dkr.z=d1.z+d2.z;  
  16.   return dkr;  
  17.   }  
  18. }  //C#操作符重载
  19. class Test  
  20. {  
  21.   publixc statixc void Main(){  
  22.     DKR d1=new DKR(3,2,1);  
  23.     DKR d2=new DKR(0,6,5);  
  24.     DKR d3=d1+d2;  
  25.     Console.WriteLine("The 3d 
  26. location of d3 is:{0},{1},{2}",d3.x,d3.y,d3,z);  
  27.   }  
  28.  

试着编译、运行该程序,看结果是否与预期一致。

C#操作符重载的基本内容就向你介绍到这里,希望对你了解和学习C#操作符重载有所帮助.

【编辑推荐】

  1. C# 操作XML之建立Xml对象浅析
  2. C# 操作XML之读取Xml浅析
  3. C# 操作XML的全过程实例浅析
  4. C#操作xml文件实例详解
  5. C#操作XML文件学习综合体会
责任编辑:仲衡 来源: bianceng.cn
相关推荐

2009-08-18 17:34:25

C#操作符重载应用

2009-08-18 18:06:54

C#操作符重载

2009-08-19 16:59:25

C# 操作符

2009-08-18 17:55:20

C#操作符重载

2009-08-18 17:42:12

C#操作符重载

2009-08-14 10:16:57

C#运算符重载

2009-08-19 17:13:15

C# 操作符基础知识

2009-08-28 16:30:24

C#线程

2009-08-19 11:23:12

C#操作Word

2009-08-19 17:26:28

C# 操作符

2009-07-14 18:34:22

Jython操作符重载

2009-08-18 13:06:17

C#枚举类型

2009-08-12 11:20:51

C#运算符重载

2009-08-19 17:20:22

C# 操作符

2010-02-05 10:30:02

C++操作符重载

2009-08-12 12:46:11

C#运算符重载

2009-09-09 10:53:25

C# MessageB

2009-08-13 17:52:13

C#构造函数

2009-08-27 17:50:09

interface接口

2010-02-03 10:23:47

C++操作符重载
点赞
收藏

51CTO技术栈公众号