前言:
在C#中自定义类型是不能像字符串或者整型那样使用 + - * /等运算符号来运算的,本文介绍如何使自定义类型也可以使用运算符。
先看一段代码:
1.自定义一个类:
class Temp
{
public int value { get; }
public Temp(int value) => this.value = value;
public static Temp operator +(Temp t1, Temp t2) => new Temp(t1.value + t2.value);
}
2.使用 +
Temp t1 = new Temp(1);
Temp t2 = new Temp(2);
Temp t3 = t1 + t2;
Console.WriteLine(t3.value);
3.输出:
3
我们通过+将两个自定义类型的对象相加得到了一个新的对象t3,这里我们可以看出自定义的Temp类中使用了这样一行代码:
public static Temp operator +(Temp t1, Temp t2) => new Temp(t1.value + t2.value);
等价于:
public static Temp operator +(Temp t1, Temp t2)
{
return new Temp(t1.value + t2.value);
}
我们可以看到这是一个静态公共函数返回类型为自定义的Temp类型,接收2个Temp类型的参数,operate后面的+正是我们重载的符号,因此才能将t1和t2两个对象相加生成一个Temp类型新对象。你可以根据需要自定义返回类型和传入参数类型,当然你也可以重载 -、’x、/、== 、!= 等二元运算符,需要注意的是像==与!=是成对存在的,你需要同时重载二者才可以使用。