Unity C 運算子過載

2021-09-29 21:21:33 字數 2077 閱讀 7890

使用 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

}

可以通過定義從intfraction的隱式轉換來擴充套件前面的示例。 然後,過載運算子將支援這兩種型別的引數。 也就是說,可以將乙個整數新增到乙個分數中,得到乙個分數結果。

還可以使用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

無法過載條件邏輯運算子。 但是,如果具有已過載的truefalse運算子的型別還以某種方式過載了&|運算子,則可針對此型別的運算元分別計算&&||運算子。 有關詳細資訊,請參閱 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...