C# 運算符重載

2018-01-22 17:09 更新

C# 運算符重載

運算符可以為自定義類型重載。

以下符號運算符可以重載:


+(unary) 
-(unary) 
! 
~
++
--
+ 
-
*
/
% 
& 
|
^
<<
>> 
== 
!=
>
<
>= 
<=

以下運算符也是可重載的:隱式和顯式轉(zhuǎn)換true和false。

復合賦值運算符(例如,+ =,/ =)通過重寫非復合運算符(例如,+,/)而隱式重寫。

條件運算符&&和||通過重寫按位運算符&和|隱式重寫。

運算符函數(shù)

運算符通過聲明運算符函數(shù)重載。

函數(shù)的名稱使用運算符關(guān)鍵字和運算符符號指定。

運算符函數(shù)必須標記為static和public。

操作符函數(shù)的參數(shù)表示操作數(shù)。

運算符函數(shù)的返回類型表示表達式的結(jié)果。

至少一個操作數(shù)必須是聲明操作符函數(shù)的類型。

在下面的示例中,我們定義一個名為Coin的結(jié)構(gòu),然后重載+運算符:


public struct Coin {
    int value;
    public Coin (int c) {
       value = c;
    }
    public static Coin operator + (Coin x, int p) {
       return new Coin (x.value + p);
    }
}

這個重載允許我們給一個Coin添加一個int:


Coin B = new Coin (2);
Coin A = B + 2;

重載賦值運算符會自動支持相應的復合賦值運算符。

在我們的示例中,由于我們覆蓋+,我們也可以使用+ =:


B += 2;

注意

C#編譯器強制執(zhí)行要定義的邏輯對的運算符。這些運算符是(==!=),(<>)和(<=> =)。

如果你重載==和!=,你通常需要重寫對象上定義的Equals和GetHashCode方法。

如果你重載(<>)和(<=> =),你應該實現(xiàn)IComparable和IComparable <T>。

隱式和顯式轉(zhuǎn)換是可重載的操作符。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號