您可以重定义或重载 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
给的完整代码,可以自加跑一遍,调试一下,是怎么运行的,加深理解。