[C#]運算子多載(Operator Overloading)

[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();
        }

出來的結果是這個樣子,當我們呼叫--的運算後,數值被由正值轉成負值,這就是運算子多載的效果囉。

image

 

參考資料:

http://www.csharphelp.com/archives/archive135.html

游舒帆 (gipi)

探索原力Co-founder,曾任TutorABC協理與鼎新電腦總監,並曾獲選兩屆微軟最有價值專家 ( MVP ),離開職場後創辦探索原力,致力於協助青少年培養面對未來的能力。認為教育與組織育才其實息息相關,都是在為未來儲備能量,2018年起成立為期一年的專題課程《職涯躍升的關鍵24堂課》,為培養台灣未來的領袖而努力。