[C#]運算子多載(Operator Overloading)
什麼叫運算子?我們用下面這個例子來稍微說明一下:
EX:A+B; //A,B是運算元,+是運算子,且是一個二元的運算子,因為它需要兩個運算元
EX:A++; //A是運算元,++是運算子,且是一個一元的運算子,因為它只需要一個運算元
而何謂運算子多載呢?如上例中,A、B本身可能都是一個Integer型態,所以使用+跟++的意思大家應該都了解,舉例來說:
int A = 2;
int B = 3;
A+B = 2+3 = 5;
A-- = 2-1 = 1;
這是Integer型態的物件本身運算子的處理邏輯,如果今天我們希望把--的意義改成將數值轉成負數,我們該怎麼作呢?C#所提供的運算子多載就可以幫我們達到這樣的效果,以下我們嘗試新增一個新的類別:
{
private int x;
private int y;
public Complex()
{
}
public Complex(int i, int j)
{
x = i;
y = j;
}
public void ShowXY()
{
Console.WriteLine("{0} {1}", x, y);
}
//進行運算子的Overloading
public static Complex operator --(Complex c)
{
Complex temp = new Complex();
//將原值轉成負數
temp.x = c.x - c.x * 2;
temp.y = c.y - c.y * 2;
return temp;
}
}
在這個類別中我們可以看到,Complex有兩個欄位x,y,且我們針對--的運算子進行了多載的處理,標準寫法如上,接著我們寫一段小程式來測試一下,
{
Complex c2 = new Complex(10,20);
Console.WriteLine("處理前");
c2.ShowXY(); // displays 10 & 20
//將數值由正轉負
c2--;
Console.WriteLine("處理後");
c2.ShowXY(); // diapls -10 & -20
Console.ReadKey();
}
出來的結果是這個樣子,當我們呼叫--的運算後,數值被由正值轉成負值,這就是運算子多載的效果囉。
參考資料:
http://www.csharphelp.com/archives/archive135.html
游舒帆 (gipi) 探索原力Co-founder,曾任TutorABC協理與鼎新電腦總監,並曾獲選兩屆微軟最有價值專家 ( MVP ),離開職場後創辦探索原力,致力於協助青少年培養面對未來的能力。認為教育與組織育才其實息息相關,都是在為未來儲備能量,2018年起成立為期一年的專題課程《職涯躍升的關鍵24堂課》,為培養台灣未來的領袖而努力。 |