”、“?:”这样的运算符以及诸如“+=”这样的复合赋值运算符无法重载,因为这会使代码变得
异常复杂,得不偿失。
重载的转换
让我们返回到最初的示例:
Complex i = 5;
Complex sum = i + j;
虽然知道了如何重载加法运算符,但我们仍需要想方法使第一个语句发挥作用。这可以通过对转换进行重载来实现。
隐式和显式转换
C# 同时支持隐式和显式转换。隐式转换是那些总是能成功执行的转换,并且其成功的原因通常是目标类型的范围等于或大
于源类型的范围。从 short 到 int 的转换就是一个隐式转换。隐式转换可以作为赋值语句的一部分:
short svalue = 5;
long lvalue = svalue;
显式转换是那些可能导致数据丢失或者引发异常的转换。因此,显式转换要求强制进行类型转换:
long lvalue = 5;
short svalue = (short) lvalue;
对转换进行重载时,应该决定转换是隐式还是显式的,但是,应该明白隐式转换模型是安全的,而显式转换则是有风险
的。
将整数值 5 转换为复数的转换定义如下所示:
public static implicit operator Complex(int value)
{
return(new Complex(value, 1.0));
}
这允许进行从 int 到 Complex 的隐式转换。
语言的互操作性
以上是在 C# 中对运算符进行重载的情况。涉及到其它语言时,事情将变得略为复杂。
运算符重载不是 .NET 公共语言子集中的功能之一,这意味着在某些语言中将无法使用重载。因此,提供非重载的替代方
案是非常重要的,以便在其它语言中仍然能执行相同的运算。如果您的类定义了加法运算符,它还应该定义相同的方法,
使用类似 Add 这样的名称进行命名。
关键词:帮帮我,我负载过重(C#)