C# 常用符號

一、[]
方括號 ([]) 用於數組、索引器和屬性,也可用於指針。
1
、數組類型是一種後跟 [] 的類型:

int[] fib = new int[100]; //創建一個有100元素的數組
若要訪問數組的一個元素,則用方括號括起所需元素的索引:
fib[0] = fib[1] = 1;
for( int i=2; i<100; ++i ) fib[i] = fib[i-1] + fib[i-2];// 
如果數組索引超出範圍,則會引發異常。
2
、不能重載數組索引運算符;但類型可以定義採用一個或多個參數的索引器和屬性。索引器參數括在方括號中(就像數組索引一樣),但索引器參數可聲明爲任何類型(這與數組索引不同,數組索引必須爲整數)。
例如,.NET Framework 定義 Hashtable 類型,該類型將鍵和任意類型的值關聯在一起。
Collections.Hashtable h = new Collections.Hashtable();
h["a"] = 123; // note: using a string as the index
3
、方括號還用於指定屬性(C# 編程指南):
[attribute(AllowMultiple=true)]
public class Attr 
{
}
4
、可以使用方括號來指定指針索引:
unsafe fixed ( int* p = fib )   // p points to fib from earlier example
{
    p[0] = p[1] = 1;
    for( int i=2; i<100; ++i ) p[i] = p[i-1] + p[i-2];
}

二、()
除了用於指定表達式中的運算順序外,圓括號還用於指定強制轉換或類型轉換:
double x = 1234.7;
int a;
a = (int)x; // cast double to int

三、.
點運算符 (.) 用於成員訪問。點運算符指定類型或命名空間的成員。例如,點運算符用於訪問.NET Framework 類庫中的特定方法:
System.Console.WriteLine("hello");

四、::
命名空間別名限定符運算符 (::),用於查找標識符。它通常放置在兩個標識符之間,例如:
global::System.Console.WriteLine("Hello World");
備註:
命名空間別名限定符可以是 global。這將調用全局命名空間中的查找,而不是在別名命名空間中。

五、+
運算符既可作爲一元運算符也可作爲二元運算符。
備註:
一元 + 運算符是爲所有數值類型預定義的。對數值類型進行一元 + 運算的結果就是操作數的值。
爲數值類型和字符串類型預定義了二元 + 運算符。對於數值類型,計算兩個操作數之和。當其中的一個操作數是字符串類型或兩個操作數都是字符串類型時,將操作數的字符串表示形式串聯在一起。
委託類型也提供二元 + 運算符,該運算符執行委託串聯。

實例:
using System;
class MainClass
{
    static void Main() 
    {
        Console.WriteLine(+5);        // unary plus
        Console.WriteLine(5 + 5);     // addition
        Console.WriteLine(5 + .5);    // addition
        Console.WriteLine("5" + "5"); // string concatenation
        Console.WriteLine(5.0 + "5"); // string concatenation
        // note automatic conversion from double to string
    }
}

六、-
運算符既可作爲一元運算符也可作爲二元運算符。
一元 - 運算符是爲所有數值類型預定義的。數值類型的一元 - 運算的結果是操作數的反數。
二元 - 運算符是爲所有數值類型和枚舉類型預定義的,其功能是從第一個操作數中減去第二個操作數。
委託類型也提供二元 - 運算符,該運算符執行委託移除。

示例:
using System;
class MainClass
{
    static void Main() 
    {
        int a = 5;
        Console.WriteLine(-a);
        Console.WriteLine(a - 1);
        Console.WriteLine(a - .5);
    }
}

七、*
乘法運算符 (*),用於計算操作數的積。另外還用作取消引用運算符,允許讀取和寫入指針。
備註:
所有數值類型都具有預定義的乘法運算符。
運算符還用來聲明指針類型和取消引用指針。該運算符只能在不安全的上下文中使用,通過unsafe 關鍵字的使用來表示,並且需要 /unsafe 編譯器選項。取消引用運算符也稱爲間接尋址運算符。

示例:
using System;
class MainClass
{
    static void Main() 
    {
        Console.WriteLine(5 * 2);
        Console.WriteLine(-.5 * .2);
        Console.WriteLine(-.5m * .2m); // decimal type
    }
}

八、/
除法運算符 (/) 用第二個操作數除第一個操作數。所有數值類型都具有預定義的除法運算符。
using System;
class MainClass
{
    static void Main() 
    {
        Console.WriteLine(-5/2);
        Console.WriteLine(-5.0/2);
    }
}

九、%
模數運算符 (%) 計算第二個操作數除第一個操作數後的餘數。所有數值類型都具有預定義的模數運算符。
using System;
class MainClass
{
    static void Main() 
    {
        Console.WriteLine(5 % 2);       // int
        Console.WriteLine(-5 % 2);      // int
        Console.WriteLine(5.0 % 2.2);   // double
        Console.WriteLine(5.0m % 2.2m); // decimal
        Console.WriteLine(-5.2 % 2.0); // double
    }
}

十、&
運算符既可作爲一元運算符也可作爲二元運算符。
備註:
一元 & 運算符返回操作數的地址(要求 unsafe 上下文)。
爲整型和 bool 類型預定義了二進制 運算符。對於整型,計算操作數的邏輯按位。對於 bool 操作數,計算操作數的邏輯;也就是說,當且僅當兩個操作數均爲 true 時,結果才爲 true 
運算符計算兩個運算符,與第一個操作數的值無關。例如:

int i = 0;
if (false & ++i == 1)
{
}

十一、|
二元 | 運算符是爲整型和 bool 類型預定義的。對於整型,計算操作數的按位結果。對於 bool 操作數,計算操作數的邏輯結果;也就是說,當且僅當兩個操作數均爲 false時,結果才爲 false
using System;
class MainClass
{
    static void Main() 
    {
        Console.WriteLine(true | false); // logical or
        Console.WriteLine(false | false); // logical or
        Console.WriteLine("0x{0:x}", 0xf8 | 0x3f);   // bitwise or
    }
}

十二、^
二元 ^ 運算符是爲整型和 bool 類型預定義的。對於整型,將計算操作數的按位異或。對於 bool 操作數,將計算操作數的邏輯異或;也就是說,當且僅當只有一個操作數爲 true時,結果才爲 true
using System;
class MainClass 
{
    static void Main() 
    {
        Console.WriteLine(true ^ false); // logical exclusive-or
        Console.WriteLine(false ^ false); // logical exclusive-or
        // Bitwise exclusive-or:
        Console.WriteLine("0x{0:x}", 0xf8 ^ 0x3f);
    }
}

十三、!
邏輯非運算符 (!) 是對操作數求反的一元運算符。爲 bool 定義了該運算符,當且僅當操作數爲false 時才返回 true
using System;
class MainClass 
{
    static void Main() 
{
        Console.WriteLine(!true);
        Console.WriteLine(!false);
    }
}

十四、~
運算符對操作數執行按位求補運算,其效果相當於反轉每一位。按位求補運算符是爲intuintlong  ulong 類型預定義的。
using System;
class MainClass
{
    static void Main() 
    {
        int[] values = { 0, 0x111, 0xfffff, 0x8888, 0x22000022};
        foreach (int v in values)
        {
            Console.WriteLine("~0x{0:x8} = 0x{1:x8}", v, ~v);
        }
    }
}

十五、=
賦值運算符 (=) 將右操作數的值存儲在左操作數表示的存儲位置、屬性或索引器中,並將值作爲結果返回。操作數的類型必須相同(或右邊的操作數必須可以隱式轉換爲左邊操作數的類型)。
using System;
class MainClass
{
    static void Main()
    {
        double x;
        int i;
        i = 5; // int to int assignment
        x = i; // implicit conversion from int to double
        i = (int)x; // needs cast
        Console.WriteLine("i is {0}, x is {1}", i, x);
        object obj = i;
        Console.WriteLine("boxed value = {0}, type is {1}",
                  obj, obj.GetType());
        i = (int)obj;
        Console.WriteLine("unboxed: {0}", i);
    }
}

十六、<
所有數值和枚舉類型都定義小於關係運算符 (<),如果第一個操作數小於第二個操作數,該運算符返回 true,否則返回 false
using System;
class MainClass
{
    static void Main() 
    {
        Console.WriteLine(1 < 1.1);
        Console.WriteLine(1.1 < 1.1);
    }
}

十七、>
所有數值類型和枚舉類型都定義大於關係運算符 >,如果第一個操作數大於第二個操作數,它將返回 true,否則返回 false
using System;
class MainClass
{
    static void Main() 
    {
        Console.WriteLine(1.1 > 1);
        Console.WriteLine(1.1 > 1.1);
    }
}

十八、?:
條件運算符 (?:) 根據布爾型表達式的值返回兩個值中的一個。條件運算符的格式如下 
condition ? first_expression : second_expression;
備註:

如果條件爲 true,則計算第一表達式並以它的計算結果爲準;如果爲 false,則計算第二表達式並以它的計算結果爲準。只計算兩個表達式中的一個。
使用條件運算符,可以更簡潔、雅觀地表達那些否則可能要求 if-else 結構的計算。例如,爲在sin 函數的計算中避免被零除,可編寫爲
if(x != 0.0) s = Math.Sin(x)/x; else s = 1.0;
或使用條件運算符,
s = x != 0.0 ? Math.Sin(x)/x : 1.0;

十九、++
增量運算符 (++) 將操作數加 1。增量運算符可以出現在操作數之前或之後:
備註:
第一種形式是前綴增量操作。該操作的結果是操作數加 1 之後的值。
第二種形式是後綴增量操作。該運算的結果是操作數增加之前的值。
數值類型和枚舉類型具有預定義的增量運算符。用戶定義的類型可重載 ++ 運算符。在枚舉時通常允許整型運算。

二十、--
減量運算符 (--) 將操作數減 1。減量運算符可以出現在操作數之前或之後:--variable variable--。第一種形式是前綴減量操作。該運算的結果是操作數減小之後的值。第二種形式是後綴減量操作。該運算的結果是操作數減小之前的值。
備註:
數值類型和枚舉類型具有預定義的增量運算符。
用戶定義的類型可重載 -- 運算符(請參見運算符)。在枚舉時通常允許整型運算。

二十一、&&
條件運算符 (&&) 執行其 bool 操作數的邏輯運算,但僅在必要時才計算第二個操作數。
備註:
操作
x && y
對應於操作
x & y
不同的是,如果 x  false,則不計算 y(因爲不論 y 爲何值,操作的結果都爲false)。這被稱作爲短路計算。
不能重載條件運算符,但常規邏輯運算符和運算符 true  false 的重載,在某些限制條件下也被視爲條件邏輯運算符的重載。

 

二十二、||
條件運算符 (||) 執行 bool 操作數的邏輯運算,但僅在必要時才計算第二個操作數。
備註:
操作
x || y
對應於操作
x | y
不同的是,如果 x  true,則不計算 y(因爲不論 y 爲何值,操作的結果都爲true)。這被稱作爲短路計算。
不能重載條件運算符,但規則邏輯運算符和運算符 true  false 的重載,在某些限制條件下也被視爲條件邏輯運算符的重載。

 

二十三、<<
左移運算符 (<<) 將第一個操作數向左移動第二個操作數指定的位數。第二個操作數的類型必須是 int
備註:
如果第一個操作數是 int  uint32 位數),則移位數由第二個操作數的低 5 位給出。
如果第一個操作數是 long  ulong64 位數),則移位數由第二個操作數的低 6 位給出。
第一個操作數的高序位被放棄,低序空位用 0 填充。移位操作從不導致溢出。
用戶定義的類型可重載 << 運算符(請參見 operator);第一個操作數的類型必須爲用戶定義的類型,第二個操作數的類型必須爲 int。重載二元運算符時,也會隱式重載相應的賦值運算符(如果有)。

二十四、>>
右移運算符 (>>) 將第一個操作數向右移動第二個操作數所指定的位數。
備註:
如果第一個操作數爲 int  uint32 位數),則移位數由第二個操作數的低五位給出(第二個操作數 & 0x1f)。
如果第一個操作數爲 long  ulong64 位數),則移位數由第二個操作數的低六位給出(第二個操作數 & 0x3f)。
如果第一個操作數爲 int  long,則右移位是算術移位(高序空位設置爲符號位)。如果第一個操作數爲 uint  ulong 類型,則右移位是邏輯移位(高位填充 0)。
用戶定義的類型可重載 >> 運算符;第一個操作數的類型必須爲用戶定義的類型,第二個操作數的類型必須爲 int。有關更多信息,請參見 operator。重載二元運算符時,也會隱式重載相應的賦值運算符(如果有)。

二十五、==
對於預定義的值類型,如果操作數的值相等,則相等運算符 (==) 返回 true,否則返回 false。對於 string 以外的引用類型,如果兩個操作數引用同一個對象,則 == 返回 true。對於string 類型,== 比較字符串的值。
備註:
用戶定義的值類型可重載 == 運算符(請參見 operator)。用戶定義的引用類型也可重載 == 運算符,儘管在默認情況下,無論對於預定義的引用類型還是用戶定義的引用類型,== 的行爲都與上面描述的相同。如果重載 ==,則還必須重載 !=。在枚舉時通常允許整型運算。

 

二十六、!=
如果操作數相等,則不等運算符 (!=) 返回 false,否則,返回 true。爲所有類型(包括字符串和對象)預定義了不等運算符。用戶定義的類型可重載 != 運算符。
備註:
對於預定義的值類型,如果操作數的值不同,則不等運算符 (!=) 返回 true,否則,返回false。對於 string 以外的引用類型,如果兩個操作數引用不同的對象,則 != 返回 true。對於 string 類型,!= 比較字符串的值。
用戶定義的值類型可重載 != 運算符(請參見 operator)。用戶定義的引用類型也可重載 != 運算符,儘管在默認情況下,無論對於預定義的引用類型還是用戶定義的引用類型,!= 的行爲都與上面描述的相同。如果重載 !=,則還必須重載 ==。在枚舉時通常允許整型運算。

 

二十七、<=
所有數值和枚舉類型都定義了小於等於關係運算符 (<=),如果第一個操作數小於或等於第二個操作數,則該運算符將返回 true,否則返回 false

二十八、>=
所有數值類型和枚舉類型都定義大於等於關係運算符 >=,如果第一個操作數大於或等於第二個操作數,該運算符將返回 true,否則返回 false

二十九、+=
加法賦值運算符。
備註:
使用 += 賦值運算符的表達式,例如
x += y
等效於
x = x + y
不同的是 x 只計算一次。運算符的含義取決於 x  y 的類型(例如,對於數值操作數,其含義爲相加;對於字符串操作數,其含義爲串聯)。
不能直接重載 += 運算符,但用戶定義的類型可以重載 + 運算符(請參見 operator)。

 

三十、-=
減法賦值運算符。
備註:
使用 -= 賦值運算符的表達式,如
x -= y
等效於
x = x - y
不同的是 x 只計算一次。運算符的含義取決於 x  y 的類型(例如,對於數值操作數,其含義爲相減;對於委託操作數,其含義爲移除)。
不能直接重載 -= 運算符,但用戶定義的類型可重載 - 運算符(請參見 operator)。

三十一、*=
二元乘法賦值運算符。
備註:
使用 *= 賦值運算符的表達式,如
x *= y
等效於
x = x * y
不同的是 x 只計算一次。爲數值類型預定義了 * 運算符以執行乘法操作。
不能直接重載 *= 運算符,但用戶定義的類型可重載 * 運算符(請參見 operator)。

三十二、/=
除法賦值運算符。
備註:
使用 /= 賦值運算符的表達式,如
x /= y
等效於
x = x / y
不同的是 x 只計算一次。爲數值類型預定義了 / 運算符以執行除法操作。
不能直接重載 /= 運算符,但用戶定義的類型可重載 / 運算符(請參見 operator)。對於所有複合賦值運算符,隱式重載二元運算符會重載等效的複合賦值。

三十三、%=
模塊賦值運算符。
備註:
使用 %= 賦值運算符的表達式,如
x %= y
等效於
x = x % y
不同的是 x 只計算一次。爲數值類型預定義了 % 運算符,以計算相除後的餘數。
不能直接重載 %= 運算符,但用戶定義的類型可重載 % 運算符(請參見運算符(C# 參考))。

三十四、&=
賦值運算符。
備註:
使用 &= 賦值運算符的表達式,如
x &= y
等效於
x = x & y
不同的是 x 只計算一次。運算符對整數操作數執行按位邏輯運算,對 bool 操作數執行邏輯運算。
不能直接重載 &= 運算符,但用戶定義的類型可重載二元 & 運算符(請參見 operator)。

三十五、|=
賦值運算符。
備註:
使用 |= 賦值運算符的表達式,例如
x |= y
等效於
x = x | y
不同的是 x 只計算一次。運算符對整型操作數執行按位邏輯運算,對布爾操作數執行邏輯運算。
不能直接重載 |= 運算符,但用戶定義的類型可以重載 | 運算符(請參見 operator)。

三十六、^=
異或賦值運算符。
備註:
下列形式的表達式
x ^= y
按如下規則計算:
x = x ^ y
不同的是 x 只計算一次。運算符對整數操作數執行按位異或運算,對 bool 操作數執行邏輯異或運算。
不能直接重載 ^= 運算符,但用戶定義的類型可重載 ! 運算符(請參見 operator)。

三十七、<<=
左移賦值運算符。
備註:
下列形式的表達式
x <<= y
按如下規則計算:
x = x << y
不同的是 x 只計算一次。<< 運算符將 x 向左移動 y 指定的位數。
不能直接重載 <<= 運算符,但用戶定義的類型可重載 << 運算符(請參見 operator)。

三十八、>>=
右移賦值運算符。
備註:
下列形式的表達式
x >>= y
按如下規則計算:
x = x >> y
不同的是 x 只計算一次。>> 運算符根據 y 指定的量對 x 進行右移位。
不能直接重載 >>= 運算符,但用戶定義的類型可重載 >> 運算符(請參見 operator)。

三十九、->
-> 運算符將指針取消引用與成員訪問組合在一起。
備註:
以下形式的表達式 
x->y
(其中 x  T* 類型的指針, T 的成員)等效於

(*x).y
-> 
運算符只能在非託管代碼中使用。
不能重載 -> 運算符。

 

四十、??
如果 ?? 運算符的左操作數非空,該運算符將返回左操作數,否則返回右操作數。
備註:
可空類型可以包含值,或者可以是未定義的。?? 運算符定義當可空類型分配給非可空類型時返回的默認值。如果在將可空類型分配給非可空類型時不使用 ?? 運算符,將生成編譯時錯誤。如果使用強制轉換,並且當前未定義可空類型,將發生 InvalidOperationException 異常。 
示例

發佈了13 篇原創文章 · 獲贊 28 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章