☆c#的運算子定義只有四種形式:---------------------------------------
①public static 返回型別 operator ?(單形參)
②public static 返回型別 operator ?(雙形參)
③public static implicit operator 隱轉目標型別(單源型別形參)
④public static explicit operator 顯轉目標型別(單源型別形參)
△全部都是傳值,故不可用ref和out引數
△全部都是static
△比較運算子的過載必須貫徹成對一起定義的原則來實現c#的一站式編碼
△true()和false()也是運算子,分別表示 非(假/空)嗎 和 非(真/空)嗎
☆可過載的運算子以及解決方法可行性表(摘自vs.n中文正式版幫助):--------------------------------
運算子 可過載性
+, -, !, ~, ++, --, true(), false() 可以過載這些一元運算子。
+, -, *, /, %, &, | , ^, <<, >> 可以過載這些二進位制運算子。
==, !=, <, >, <=, >=可以過載這些比較運算子(但必須成對過載)。
&&, ||不能過載條件邏輯運算子,但可使用 & 和 | 對其進行計算,可以過載 & 和 |;請參閱 7.11.2 使用者定義的條件邏輯運算子。
不能過載陣列索引運算子,但可定義索引器。
()不能過載轉換運算子,但可定義新的轉換運算子(請參閱 explicit 和 implicit)。
+=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=
不能過載賦值運算子,但例外的是可使用 +(該運算子可被過載)計算 +=。
=, ., ?:, ->, new, is, sizeof(), typeof()
不能過載這些運算子。
☆一些散題:-------------------------------------
①傳遞物件引用是傳值的一種,不屬於傳址.因為物件的值只是實體的位址,如果傳物件變數的位址才算是傳址
②readonly比const寬鬆,因為也可以在構造器中賦值,此外【static readonly】<=>【const】
③using簡化書寫的其中乙個功能就是建立〖姓或型別〗的別名,可減少修改
④using(idispose化的物件〖,....〗)語句可以確保句尾呼叫物件.dispose()
⑤**和注釋是最好的心得!
☆以下是c#運算子過載以及其他技巧的簡單例子(摘自vs.n中文正式版幫助)--------------------------------
// dbbool.cs
using system;
public struct dbbool
// 從 bool 到 dbbool 的隱式轉換。將 true 對映為
// dbbool.dbtrue,並將 false 對映為 dbbool.dbfalse:
public static implicit operator dbbool(bool x)
// 從 dbbool 到 bool 的顯式轉換。如果
// 給定的 dbbool 為 dbnull,則引發異常,否則返回
// true 或 false:
public static explicit operator bool(dbbool x)
// 相等運算子。如果任何乙個運算元為 dbnull,則返回 dbnull,
// 否則返回 dbtrue 或 dbfalse:
public static dbbool operator ==(dbbool x, dbbool y)
// 不等運算子。如果任何乙個運算元為
// dbnull,則返回 dbnull,否則返回 dbtrue 或 dbfalse:
public static dbbool operator !=(dbbool x, dbbool y)
// 邏輯非運算子。如果運算元為
// dbfalse,則返回 dbtrue,如果運算元為 dbnull,則返回 dbnull,如果
// 運算元為 dbtrue,則返回 dbfalse:
public static dbbool operator !(dbbool x)
// 邏輯 and 運算子。如果任何乙個運算元為
// dbfalse,則返回 dbfalse,如果任何乙個運算元為 dbnull,則返回 dbnull,否則返回 dbtrue:
public static dbbool operator &(dbbool x, dbbool y)
// 邏輯 or 運算子。如果任何乙個運算元為
// dbtrue,則返回 dbtrue,如果任何乙個運算元為 dbnull,則返回 dbnull,否則返回 dbfalse:
public static dbbool operator |(dbbool x, dbbool y)
// 絕對真運算子。如果運算元為
// dbtrue,則返回 true,否則返回 false:
public static bool operator true(dbbool x)
// 絕對假運算子。如果運算元為
// dbfalse,則返回 true,否則返回 false:
public static bool operator false(dbbool x)
// 過載從 dbbool 到 string 的轉換:
public static implicit operator string(dbbool x)
// 重寫 object.equals(object o) 方法:
public override bool equals(object o)
catch
}// 重寫 object.gethashcode() 方法:
public override int gethashcode()
// 重寫 tostring 方法以便將 dbbool 轉換為 string:
public override string tostring() }}
class test
= ", a, !a);
console.writeline( "! = ", b, !b);
console.writeline( " & = ", a, b, a & b);
console.writeline( " | = ", a, b, a | b);
// 呼叫真運算子以確定 dbbool 變數的
// 布林值:
if (b)
console.writeline("b is definitely true");
else
console.writeline("b is not definitely true");}}
C 運算子資料
c 的運算子定義只有四種形式 public static 返回型別 operator 單形參 public static 返回型別 operator 雙形參 public static implicit operator 隱轉目標型別 單源型別形參 public static explicit op...
C 運算子過載賦值運算子
自定義類的賦值運算子過載函式的作用與內建賦值運算子的作用類似,但是要要注意的是,它與拷貝建構函式與析構函式一樣,要注意深拷貝淺拷貝的問題,在沒有深拷貝淺拷貝的情況下,如果沒有指定預設的賦值運算子過載函式,那麼系統將會自動提供乙個賦值運算子過載函式。賦值運算子過載函式的定義與其它運算子過載函式的定義是...
C 運算子過載轉換運算子
為什麼需要轉換運算子?大家知道對於內建型別的資料我們可以通過強制轉換符的使用來轉換資料,例如 int 2.1f 自定義類也是型別,那麼自定義類的物件在很多情況下也需要支援此操作,c 提供了轉換運算子過載函式 它使得自定義類物件的強轉換成為可能。轉換運算子的生命方式比較特別,方法如下 operator...