2011-04-05 44 views
1

C#中的h = ++ih = i++之間有區別。所以我需要的是一種方法來聲明不同的重載運算符,用於C#中的預增(即++ i)和後增(i ++)。我該怎麼做?C#前後增量操作符重載如何操作?

我知道兩個操作員對他們的工作值都做同樣的事情 - 問題是分配完成時的時間點。我知道如何用C++來完成,但這不是問題。我想知道是否有一種方法來重載此操作符可以在C#中的行爲,如果是這樣,如何做到這一點。

回答

3

您不能http://msdn.microsoft.com/en-us/library/36x43w8w(v=vs.71).aspx。你只能重載++,唯一的區別是你的重載將被調用。

編輯:此外,您只能爲用戶定義的類型重載++,所以它基本上只是成爲您選擇的函數的別名。

+0

這實際上將意味着你不能超載後遞增 - 它不會工作方式,他們應該,對不對? – karx11erx 2011-04-05 14:01:22

+0

嗯,我想這取決於你正在使用什麼類和什麼行爲。 – 2011-04-05 14:03:34

2

這些操作符的刪除沒有區別。事實上,它們的作用完全相同,唯一的區別是返回的值。運算符重載對於兩者都有效,不同的返回值由運行時提供,而不是用戶代碼。

編輯:發現What is the difference between i++ and ++i?

+0

運行時不返回返回值。 「h = ++ i;」相當於「i = i + 1,h = i」; 「h = i ++;」相當於「h = i; i = i + 1;」。這是解析器檢測到的語義和隨後生成的代碼的問題。 – karx11erx 2011-04-05 14:00:28

+0

我找到了帖子。我有一種感覺,那就是操作員不像你認爲他們在C#中那樣工作。 – Femaref 2011-04-05 14:06:53

+0

我會說你的答案有點不同。 Eric對另一個問題的答案的簡短短版本是,操作員以完全相同的順序完成相同的步驟,不同之處在於前綴形式返回新值(在本例中爲'i'),而後綴返回舊值的臨時副本。 – 2011-04-05 14:11:16