C# - 使用operator關鍵字實現操作符重載

使用 operator 關鍵字來重載內置運算符,或提供類或結構聲明中的用戶定義轉換。
C#中,操作符都是一些靜態方法,其返回值表示操作結果,其參數是操作數.當我們爲一個類創建操作符時,我們稱爲"重載(OverLoad)"該操作符,與成員方法重載很像.要重載加法操作符(+),應這樣寫:
public static Fraction operator+(Fraction lhs,Fraction rhs);
將參數取名爲lhs和rhs是我的習慣,參數名lhs代表"lefthand side"(左手邊),這樣可以提醒我第一參數代表操作的左邊.類似的,rhs代表"righthand side"(右手邊).
C#的操作符號重載語法是在要重載的操作符後寫上關鍵字operator.該關鍵字是一個方法修飾符.因此要重載加法操作符(+),應寫成operator+.

C#可以隱式地將int轉換long,並允許顯式地將long轉換爲int.int到long是隱式轉換,因爲任何int都可以適應long的內存表示.而逆操作,從long到int,必須是顯式的(要用強制轉換操作符),因爲轉換可能使信息丟失:
 int myInt = 5;
 long myLong;
 myLong = myInt; //隱式
 myInt = (int) myLong; //顯式
對分數可能也需要相同的功能.對於給定的int,可以支持隱式的轉換爲分數,因爲整數值等於值除以1(如 15= =15/1).
對於給定分數,可以提供顯式轉換爲整數,只要允許值可以取整.因此,9/4可以轉換爲整數值2.
提示:關鍵字implicit用於轉換肯定成功,不會丟失信息的時候;否則就用explicit.
public static implicit operator Fraction(int theInt){
 return new Fraction(theInt);
}

public static explicit operator int(Fraction theFraction){
 return theFraction.numerator/theFraction.denominator;
}

轉換操作符號後是等於操作符(==)和不等於操作符(!=).請記住,如果實現了其中一個,必須實現另一個.
public static bool operator ==(Fraction lhs,Fraction rhs){
 Console.WriteLine("In operator ==");
    if (lhs.denominator == rhs.denominator && lhs.numerator == rhs.numerator) 
  return true;
    return false;
}

public static bool operator !=(Fraction lsh,Fraction rhs){
 Console.WriteLine("In operator !=");
  return !(lhs == rhs);
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章