很多语言都允许程序员使用运算符重载,尽管从编程的角度看,这没有其必要性,但是对于代码来讲可以提高它的可读性,带来许多方便之处。最简单的例子就是,我们用String类的时候,用“+”运算符直接实现字符串的连接,很方便很直观。虽然,Java不允许重载运算符,但是在它在类库级别上也重载了String类的“+”运算符。C#和C++一样,提供了运算符重载机制。但是,它的要求要严格一些,这里提一下C#中自增运算符“++”的重载使用。
在C++中,要体现前置++运算,总是要给其添加一个int类型的参数,尽管我们用不上它。在C#中我们只需也只可以写一种形式,看例子:
namespace Polymorphy
{
internal class Program
{
static void Main(string[] args)
{
AType instance = new AType(100);
Console.WriteLine(instance++.data);
Console.WriteLine((++instance).data);
Console.WriteLine(instance.data);
Console.ReadKey();
}
};
class AType
{
public int data;
public AType(int para)
{
this.data=para;
}
public static AType operator ++(AType para)
{
Console.WriteLine("执行重载运算符++");
return new AType(1+para.data);
}
};
}
执行结果:
执行重载运算符++"
100
执行重载运算符++"
102
102
分析:不管前置后置运算,程序总是执行重载运算符对应的函数,但是,后置执行以后把对象原来的值以临时变量的形式反馈回来。而前置,则直接执行函数即可。
说明:C#对++运算符重载的要求:
1、 参数必须是一个,而且只能是包含它的类型,也就是它的所在类类型。
2、 返回值,必须是所在类类型或其派生类。
3、 所有重载的运算符必须是 public 和 static的,这是编译时要求。