operator 只要是運算符都能重載
operator 關鍵字的主要作用是用來重載運算符的,還可以用於類或結構中類型的自定義轉換。
下面看個例子
class Feige { //定義兩個全局變量 int a, b; //聲明帶兩個參數的構造函數 public Feige(int a, int b) { this.a = a; this.b = b; } //重載加法運算符+ public static Feige operator +(Feige f, Feige g) { return new Feige(f.a + g.a, f.b + g.b); } //重載乘法運算符* public static Feige operator *(Feige f, Feige g) { return new Feige(f.a * g.a, f.b * g.b); } //自定義轉換類型 public static implicit operator int(Feige f) { return (int)(f.a * f.b); } }
執行
//執行構造函數 Feige fei = new Feige(2, 5); //執行構造函數 Feige ge = new Feige(3, 6); int d = (int)(fei + ge);//調用運算符+函數 int e = (int)(fei * ge);//調用運算符*函數 //兩對象加法操作結果是:55 richTextBox1.Text += "兩對象加法操作結果是:" + d + "\n"; //兩對象乘法操作結果是:180 richTextBox1.Text += "兩對象乘法操作結果是:" + e + "\n";
實例二:
class Salary { public int RMB { get; set; } public static Salary operator +(Salary s1, Salary s2) { //Salary s = new Salary(); //s2.RMB += s1.RMB; //return s2; Salary s = new Salary(); s.RMB = s2.RMB + s1.RMB; return s; } //注意下面這個重載與上面這個效果執行后的異同 上面是重新聲明了個類變量,下面這個執行結果是 s2的類變量RMB //public static Salary operator +(Salary s1, Salary s2) //{ // Salary s = new Salary(); // s2.RMB += s1.RMB; // return s2; //} public static Salary operator -(Salary s1, Salary s2) { Salary s = new Salary(); s.RMB = s1.RMB - s2.RMB; return s; } }
執行
static void Main(string[] args) { Salary mikeIncome = new Salary() { RMB = 22 }; Salary roseIncome = new Salary() { RMB = 33 }; //Salary familyIncome = Salary.Add(mikeIncome, roseIncome); Salary familyIncome = mikeIncome + roseIncome; Console.WriteLine(familyIncome.RMB); Salary subtractIncome = mikeIncome - roseIncome; Console.WriteLine(subtractIncome.RMB); Console.ReadKey(); }