c#允许用户定义的类型,通过使用operator关键字定义静态成员函数来重载运算符
下面来看一个例子:
public class ComplexNumber { private int real; private int imaginary; //构造器 public ComplexNumber(int r, int i) { real = r; imaginary = i; } //重载ToString方法,用来显示ComplexNumber public override string ToString() { if (imaginary >= 0) return (System.String.Format("{0}+{1}i", real, imaginary)); else return (System.String.Format("{0}-{1}i", real, imaginary)); } }
我们需要+、-实现两个虚数相加或相减,使用下面的方法重载+、-运算符
//重载+运算符 public static ComplexNumber operator+(ComplexNumber lhs,ComplexNumber rhs) { return new ComplexNumber( lhs.real+rhs.real,lhs.imaginary+rhs.imaginary); } //重载-运算符 public static ComplexNumber operator-(ComplexNumber lhs,ComplexNumber rhs) { return new ComplexNumber( lhs.real-rhs.real,lhs.imaginary-rhs.imaginary); }
运算符重载的声明方式和方法的声明方式相同,但operator关键字告诉编译器它实际上是运算符重载。
本例中
public static ComplexNumber operator+(ComplexNumber lhs,ComplexNumber rhs)
表示的重载运算符“+”是全局静态的返回值是ComplexNumber类型,输入参数为两个ComplexNumber型变量,返回值仍为ComplexNumber型,
返回的操作是调用ComplexNumber类中的构造器和ToString方法。
public static implicit operator ComplexNumber (double d)
其中implicit表示隐形类型转换,将d由double型转换成ComplexNumber型。
public double D (get;set;)
是一种强制类型转换形式,意思是强制转换成double型