为了表达上的方便, 人们希望可以重新给已定义的操作符赋予新的含义, 在特定的类的实例上进行新的解释. 这就需要通过操作符重载来解决
操作符重载总是在类中进行声明 , 并且通过调用类的成员方法来实现
一元操作符重载
顾名思义, 一元操作符重载时操作符 只作用与一个对象 , 此时参数表为空, 当前对象为操作符的单操作数.
using System;
class Player
{
public int neili;
public int tili;
public int jingyan;
public int fullNeili;
public int fullTili;
public Player ()
{
neili=10;
tili=50;
jingyan=0;
fullNeili=50;
fullTili=50;
}
public static Player operator ++ (Player p)
{
p.neili+=50;
p.tili+=100;
p.fullNeili=p.neili;
p.fullTili=p.tili;
return p;
}
public void Show()
{
Console.WriteLine("Tili :{0}",tili);
Console.WriteLine("Neili :{0}", neili);
Console.WriteLine("Jingyan :{0}",jingyan);
Console.WriteLine("FullNeili :{0}",fullNeili);
Console.WriteLine("FullTili :{0}",fullTili);
}
}
class Test
{
public static void Main()
{
Player p=new Player();
p.Show();
Console.WriteLine("升级后:");
p++;
p.Show();
Console.ReadKey();
}
}
二元操作符重载
大多数情况下我们使用二元操作符重载. 这是参数表中有一参数, 当前对象作为该操作符的左操作数, 参数作为操作符的右操作数.
using System;
class DKR
{
public int x,y,z;
public DKR(int vx, int vy, int vz)
{
this.x=vx;
this.y=vy;
this.z=vz;
}
public static DKR operator + (DKR d1, DKR d2)
{
DKR d3 =new DKR(0,0,0);
d3.x=d1.x+d2.x;
d3.y=d1.y+d2.y;
d3.z=d1.z+d2.z;
return d3;
}
}
class Test
{
public static 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);
}
}
|