您的位置:首页 > 编程语言 > C#

C#操作符的重载

2014-05-12 22:06 239 查看
我们知道,在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);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: