使用 operator 關鍵字來宣告運算子。 運算子宣告必須符合以下規則:
1.同時包含 public 和 static 修飾符。
2.一元運算子採用乙個引數。 二元運算子採用兩個引數。 在每種情況下,都至少有乙個引數必須具有型別 t 或 t?,其中 t 是包含運算子宣告的型別。
using system;
public readonly struct fraction
num = numerator;
den = denominator;
}public static fraction operator +(fraction a) => a;
public static fraction operator -(fraction a) => new fraction(-a.num, a.den);
public static fraction operator +(fraction a, fraction b)
=> new fraction(a.num * b.den + b.num * a.den, a.den * b.den);
public static fraction operator -(fraction a, fraction b)
=> a + (-b);
public static fraction operator *(fraction a, fraction b)
=> new fraction(a.num * b.num, a.den * b.den);
public static fraction operator /(fraction a, fraction b)
return new fraction(a.num * b.den, a.den * b.num);
}public override string tostring() => $" / ";
}public static class operatoroverloading
}
可以通過定義從int
到fraction
的隱式轉換來擴充套件前面的示例。 然後,過載運算子將支援這兩種型別的引數。 也就是說,可以將乙個整數新增到乙個分數中,得到乙個分數結果。
還可以使用operator
關鍵字來定義自定義型別轉換。
運算子可過載性
+x、-x、!x、~x、++、--、true、false
這些一元運算子可以進行過載。
x + y、x - y、x * y、x / y、x % y、x & y、x | y、x ^ y、x << y
、x >> y、x == y、x != y、x < y、x > y、x <= y、x >= y
這些二元運算子可以進行過載。 某些運算子必須成對過載;有關詳細資訊,請檢視此表後面的備註。
x && y、x || y
無法過載條件邏輯運算子。 但是,如果具有已過載的true
和false
運算子的型別還以某種方式過載了&
或|
運算子,則可針對此型別的運算元分別計算&&
或||
運算子。 有關詳細資訊,請參閱 c# 語言規範的使用者定義條件邏輯運算子部分。
a[i]
元素訪問不被視為可過載運算子,但你可定義索引器。
(t)x
強制轉換運算子不能過載,但可以定義新的轉換運算子。 有關詳細資訊,請參閱使用者定義轉換運算子。
+=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=
復合賦值運算子不能顯式過載。 但在過載二元運算子時,也會隱式過載相應的復合賦值運算子(若有)。 例如,使用+
(可以進行過載)計算+=
。
^x、x = y、x.y、c ? t : f、x ?? y、x ??= y、x..y、x->y、=>
、f(x)、as、await、checked、unchecked、default、delegate、
is、nameof、new、sizeof、stackalloc、typeof
這些運算子無法進行過載。
運算子過載之過載型別運算子
普通型別 類型別 呼叫對應的只有乙個引數 引數的型別就是這個普通型別 的建構函式 需求 boy boy1 10000 薪資 建構函式boy int boy boy2 rock 姓名 建構函式boy char 普通型別賦值給類型別其實很簡單,就是專門的對這個賦值的型別定義乙個建構函式。編譯器在執行 的...
運算子過載 賦值運算子的過載
有時候希望賦值運算子兩邊的型別可以不匹配,比如,把乙個int型別變數賦值給乙個complex物件,或把乙個 char 型別的字串賦值給乙個字串物件,此時就需要過載賦值運算子 注意 賦值運算子 只能過載為成員函式 賦值運算子過載例項示例 include include using namespace ...
運算子過載
c 中的運算子 1。大多數系統預定義運算子都能過載 不值得過載 不能被過載 2過載不能改變優先順序 不能改變結合性 不能改變運算子所需運算元的個數 過載後,可按這些運算子的表達方式使用 運算子過載的語法 一 通過運算子過載函式進行過載 1。運算子過載函式是成員函式 語法形式 type x opera...