C#中操作符都是一些静态方法,其返回值表示操作结果,其参数是操作数. 当要为一个类创建操作符时,称之为重载(overload)该操作符,比如要重载操作符"+",应该写成:
public static Fraction operator+(Fraction lop, Fraction rop)
如果重载了==操作符,必须同时重载不等于!=.(编译器还希望重定义GetHashCode,否则会有警告). 同样<,>,<=,>=这几个操作符也必须成对定义.
隐式转换,显式转换
隐式转换不会丢失信息,而显式转换则可能导致信息的丢失,比如将long型数据转换成int型等等...
对我们自己定义的类型的数据是如何实现转换的呢?
同样分隐式转换和显式转换,当转换肯定成功且不会丢失信息时,加上前缀的关键字implicit,否则就加上关键字 explicit.
看下面的例子
上面代码中需要注意的是两个转换操作符的声明,第一个转换操作符将int转换为fraction:
public static implicit operator Fraction(int theInt)
{
Console.WriteLine("In implicit conversion to Fraction");
return new Fraction(theInt);
}
这个转换是被标记为implicit的,因为从整数到分数,只需要把分母设为1,分子设为该整数就可以转换为分数,不会造成任何截断.
第二个转换操作符用于fraction到int的显式转换:
public static explicit operator int(Fraction theFraction)
{
Console.WriteLine("In explicit conversion to int");
return theFraction.numerator /
theFraction.denominator;
}