雖然語句是c#程式的構造塊,但任何一條符合語法c#語句離不開表示式。
「表示式」是由乙個或多個運算元以及零個或零個以上的運算子所組成的序列,可以通過計算得到乙個值、物件、方法或命名空間等結果。表示式可以包含文字值、方法呼叫、運算子及其運算元,或簡單名稱。簡單名稱可以是變數、型別成員、方法引數、命名空間或型別的名稱。
表示式可以使用運算子,而運算子又可以將其他表示式用作引數,或者使用方法呼叫,而方法呼叫的引數又可以是其他方法呼叫,因此表示式既可以非常簡單,也可以非常複雜。下面是表示式的兩個示例:
在大部分使用表示式的上下文中,例如在語句或方法引數中,表示式應計算為某個值。如果 x 和 y 是整數,表示式 x + y 將計算為乙個數值。 表示式 new myclass() 計算為對 myclass 物件的新例項的引用。 表示式 myclass.tostring() 計算為乙個字串,因為字串是該方法的返回型別。 然而,雖然命名空間名稱歸類為表示式,但它不計算為值,因此永遠不能作為任何表示式的最終結果。命名空間名稱不能傳遞給方法引數,不能用在新表示式中,也不能賦值給變數。命名空間名稱只能用作較大表示式的子表示式。同樣如此的還有型別(與 system ..::
. type 物件不同)、方法組名稱(與特定方法不同)以及事件 add 和 remove 訪問器。
如果值大於值型別的最大值,數值表示式可能導致溢位。
在 c# 中,「運算子」是乙個術語或符號,它接受乙個或多個表示式(即「運算元」)作為輸入並返回值。接受乙個運算元的運算子稱為「一元」運算子,例如增量運算子 ( ++) 或 new。 接受兩個運算元的運算子稱為「二元」運算子,例如算術運算子 +、 -、 *、 /。 條件運算子 ?: 接受三個運算元,是 c# 中唯一的三元運算子。
下面的 c# 語句包含乙個一元運算子和乙個運算元。增量運算子 ++ 修改運算元 y 的值:
下面的 c# 語句包含兩個二元運算子,它們分別有兩個運算元。賦值運算子 = 將乙個整數 y 和乙個表示式 2 + 3 作為運算元。 表示式 2 + 3 本身包含加運算子,並使用整數值 2 和 3 作為運算元:
運算元可以是任何大小的有效表示式,可由任何數量的其他操作組成。在計算表示式時,編譯器首先從左向右計算所有運算元。計算完所有運算元之後,按照稱為「運算子優先順序」的特定順序計算運算子。下表根據運算子執行的操作型別將它們劃分到不同的類別中。類別按優先順序順序列出。
主要運算子:
表示式說明
x .y
成員訪問
f (x)
方法和委託呼叫
a [x]
陣列和索引器訪問
x ++
後遞增x --
後遞減new t(...)
物件和委託建立
new t(...)
具有初始值設定項的物件建立。
new
匿名物件初始值設定項。
new t[...]
陣列建立。
typeof(t)
獲取 t 的 system.type 物件
checked(x)
在已檢查的上下文中計算表示式
unchecked(x)
在未檢查的上下文中計算表示式
default (t)
獲取型別 t 的預設值
delegate {}
匿名函式(匿名方法)
一元運算子
表示式說明+x
標識-x
求反!x
邏輯求反
~x 按位求反
++x
前遞增--x
前遞減(t)x
將 x 顯式轉換為型別 t
乘法運算子
表示式說明*
乘法/
除法% 餘數
加法運算子
表示式說明x + y
相加、字串串聯、委託組合
x - y
相減、委託移除
移位運算子
表示式說明x << y
左移x >> y 右移
關係和型別運算子
表示式說明x < y
小於x > y
大於x <= y
小於或等於
x >= y
大於或等於
x is t
如果 x 為 t,則返回 true;否則返回 false。
x as t
返回型別為 t 的 x,如果 x 不是 t,則返回 null
相等運算子
表示式說明x == y
等於x != y
不等於
賦值和匿名運算子
表示式說明=
賦值x op= y
復合賦值,支援的運算子包括: +=、 -=、 *=、 /=、 %=、 &=、 |=、 !=、 <<=、 >>=
(t x) => y
匿名函式(lambda 表示式)
邏輯、條件和 null 運算子 類別
表示式說明
邏輯「與」
x & y
整型按位「與」,布林型邏輯「與」
邏輯「異或」
x ^ y
整型按位「異或」,布林型邏輯「異或」
邏輯「或」
x| y
整型按位「或」,布林型邏輯「或」
條件「與」
x && y
僅當 x 為 true 時計算 y
條件「或」
x || y
僅當 x 為 false 時計算 y
null 合併
x ??y
如果 x 為 null 則計算結果為 y,否則計算結果為 x
條件x ?: y : z
如果 x 為 true 則計算結果為 y,如果 x 為 false 則計算結果為 z
當表示式中出現兩個具有相同優先順序的運算子時,將根據結合性計算它們。左結合運算子按從左到右的順序計算。例如, x * y / z 計算為 (x * y) / z。 右結合運算子按從右到左的順序計算。賦值運算子和三元運算子 ( ?:) 是右結合運算子。 其他所有二元運算子都是左結合運算子。
可以將表示式用括號括起來強制在計算其他任何表示式之前計算該表示式。例如, 2 + 3 * 2 通常將為 8。 這是因為乘法運算子的優先順序高於加法運算子。將該表示式寫為 (2 + 3) * 2 的形式,結果將是 10,因為它指示 c# 編譯器必須在計算乘法運算子 * 之前計算加法運算子 +。
對於自定義的類和結構,您可以更改運算子的行為。此過程稱為「運算子過載」。
c 基礎程式設計 之 string
首先得說一下,我是個菜逼,這個問題今天才發現,才理解是什麼意思 程式設計大牛請忽略此文章,給初學者交流一下經驗吧 臨近期末考試了,又拿出之前做的水體瀏覽一下,大喜,發現問題了 在之前的c語言中,我們會經常用 char定義乙個字元或字串,當時在處理字串長度,字串比較的時候通常會加乙個標頭檔案 incl...
c 程式設計之perror
void perror const char s perror open port perror 用來將上乙個函式發生錯誤的原因輸出到標準裝置 stderr 引數 s 所指的字串會先列印出,後面再加上錯誤原因字串。此錯誤原因依照全域性變數errno 的值來決定要輸出的字串。在庫函式中有個errno變...
C 程式設計之介面
1.定義 介面是把公共方法和屬性組合起來,以封裝特定功能的乙個集合。一旦定義了介面,就可以在類中實現它。這樣類就可以支援介面所指定的所有屬性和成員 注意1 介面不能單獨存在。不能像例項化乙個類那樣例項化乙個介面。另外介面不能包含實現其成員的任何 只能定義成員本身。實現過程必須在實現介面的類中實現。注...