C#支持表5-1所示的運算符,其中有4個運算符(sizeof、*、–>、&)只能用於不安全的代碼(這些代碼繞過了C#類型安全性的檢查),這些不安全的代碼見第7章的討論。
表 5-1
類 別
運 算 符
算術運算符
+ – * / %
邏輯運算符
& | ^ ~ && || !
字符串連接運算符
+
增量和減量運算符
++ – –
移位運算符
<< >>
比較運算符
== != < > <= >=
賦值運算符
= += –= *= /= %= &= |= ^= <<= >>=
成員訪問運算符(用於對象和結構)
.
索引運算符(用於數組和索引器)
[]
數據類型轉換運算符
()
條件運算符 (三元運算符)
:委托連接和刪除運算符(見第6章)
+ –
對象創建運算符
new
類型信息運算符
sizeof (只用於不安全的代碼) is typeof as
類 別
運 算 符
溢出異常控制運算符
checked unchecked
間接尋址運算符
* –> & (只用於不安全代碼) []
命名空間別名限定符(見第2章)
::
空接合運算符
使用C#運算符的壹個最大缺點是,與C風格的語言壹樣,賦值(=)和比較(==)運算使用不同的運算符。例如,下述語句表示“x等於3”:
x = 3;
如果要比較x和另壹個值,就需要使用兩個等號(==):
if (x == 3)
C#非常嚴格的類型安全規則防止出現常見的C#錯誤,也就是在邏輯語句中使用賦值運算符代替比較運算符。在C#中,下述語句會產生壹個編譯錯誤:
if (x = 3)
習慣使用宏字符&來連接字符串的VB程序員必須改變這個習慣。在C#中,使用加號+連接字符串,而&表示兩個不同整數值的按位AND運算。| 則在兩個整數之間執行按位OR運算。VB程序員可能還沒有使用過%(取模)運算符,它返回除運算的余數,例如,如果x等於7,則x% 5會返回2。
在C#中很少會用到指針,因此也很少會用到間接尋址運算符(–>)。使用它們的惟壹場合是在不安全的代碼塊中,因為只有在此C#才允許使用指針。指針和不安全的代碼見第7章。
5.1.1 運算符的簡化操作
表5-2列出了C#中的全部簡化賦值運算符。
表 5-2
運算符的簡化操作
等 價 於
x++, ++x
x = x + 1
x– –,– –x
x = x – 1
x+= y
x = x + y
x–= y
x = x – y
x *= y
x = x * y
x /= y
x = x / y
x %= y
x = x % y
x >>= y
x = x >> y
x <<= y
x = x << y
運算符的簡化操作
等 價 於
x &= y
x = x & y
x |= y
x = x | y
x ^= y
x = x ^ y
為什麽用兩個例子來說明++增量和– –減量運算符?把運算符放在表達式的前面稱為前置,把運算符放在表達式的後面稱為後置。它們的執行方式有所不同。
增量或減量運算符可以作用於整個表達式,也可以作用於表達式的內部。當x++和++x單獨占壹行時,它們的作用是相同的,對應於語句x = x + 1。但當它們用於表達式內部時,把運算符放在前面(++x)會在計算表達式之前遞增x,換言之,遞增了x後,在表達式中使用新值進行計算。而把運算符放在後面(x++)會在計算表達式之後遞增x—— 使用原來的值計算表達式。