c#容許用戶定義的類型,經過使用operator關鍵字定義靜態成員函數來重載運算符c#
下面來看一個例子:ide
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關鍵字告訴編譯器它其實是運算符重載。spa
本例中code
public static ComplexNumber operator+(ComplexNumber lhs,ComplexNumber rhs)
表示的重載運算符「+」是全局靜態的返回值是ComplexNumber類型,輸入參數爲兩個ComplexNumber型變量,返回值仍爲ComplexNumber型,orm
返回的操做是調用ComplexNumber類中的構造器和ToString方法。blog
public static implicit operator ComplexNumber (double d)
其中implicit表示隱形類型轉換,將d由double型轉換成ComplexNumber型。ci
public double D (get;set;)
是一種強制類型轉換形式,意思是強制轉換成double型get