国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C#基礎知識系列四(運算符匯總)

2019-11-17 03:24:52
字體:
來源:轉載
供稿:網友

C#基礎知識系列四(運算符匯總)

前言

  本節主要來講C#中的各種運算符。主要包括is運算符、as運算符、checked和unchecked運算符、sizeof運算符、空接合運算符(??)、&和&&、移位運算符、增量和減量運算符、條件運算符(三元運算符)、命名空間別名限定符。

正文

1、is運算符

is運算符可以檢查對象是否與特定的類型兼容。比如下例中要檢查變量是否與object類型兼容:

int i=0;if(i is object){  Console.WriteLine("i is an object.");}

2、as運算符

as運算符用于執行引用類型的顯式類型轉換。如果要轉換的類型和指定的類型兼容,轉換就會成功進行;如果類型不兼容,as運算符就會返回值null。舉例如下:

        static void Main(string[] args)        {            object obj1 = "a string";            object obj2 = 5;            string str1 = obj1 as string;            string str2 = obj2 as string;            Console.Write("str1為{0}/r/n", str1);            Console.Write("str2為{0}", str2);            Console.ReadLine();        }

注:as運算符允許在一步中進行安全的類型轉換,不需要先使用is運算符測試類型,再執行轉換。

3、checked和unchecked運算符

        static void Main(string[] args)        {            byte b = 255;            b++;            Console.WriteLine("第一個"+b.ToString());            try            {                byte c = 255;                checked                {                    c++; //拋出OverflowException                    Console.WriteLine(b.ToString());                }            }            catch (Exception e)            {                Console.WriteLine("拋出異常");            }            Console.ReadLine();        }

byte數據類型只能包含0~255的數,所以b值的增量會溢出。CLR如何處理溢出?C#提供了checked和unchecked運算符。如果把一塊代碼段標志為checked,CLR就會執行溢出檢查,如果發生異常,就拋出異常。

如果要禁止溢出檢查,可以把代碼標記為unchecked。

注:unchecked是默認值。只有在需要把幾個未檢查的代碼行放在一個明確標記為checked的大代碼塊中,才需要顯式使用unchecked關鍵字。

4、sizeof運算符

sizeof可以用來確定堆棧中值類型需要的長度(單位是字節):

5、空接合運算符(??)

  空接合運算符為處理可空類型和引用類型時表示Null值的可能性提供了一種快捷方式。這個運算符放在兩個操作數之間,第一個操作數必須是一個可空類型或引用類型,第二個操作數必須與第一個操作數的類型不同,或者可以隱含地轉換為第一個操作數的類型。空接合運算符的計算如下:如果第一個操作數不是null,則整個表達式就等于第一個操作數的值。但如果第一個操作數是null,則整個表達式就等于第二個操作數的值。例如:

int?a=null;int b;b=a??10; // b的值為10;a=15;b=a??10;//  b的值為15;

6、&和&&

  &:二元運算符 (&) 為整型和 bool 類型預定義了二進制 & 運算符。對于整型,& 計算操作數的按位“與”。對于 bool 操作數,& 計算操作數的邏輯“與”;也就是說,當且僅當兩個操作數均為 true 時,其結果才為 true。

  &&:條件“與”運算符 (&&) 執行布爾操作數的邏輯“與”運算,但如有必要,只計算第二個操作數。它與二元運算符 (&)很像,不同的是,如果 x 為 false,則不計算 y(因為不論 y 為何值,與操作的結果都為 false)。這被稱作為“短路”計算。

稍微提一下按位“與”

運算規則:0&0=0;0&1=0;1&0=0;1&1=1;

即:兩位同時為“1”,結果才為“1”,否則為0

例如:3&5即 0000 0011 & 0000 0101 = 0000 0001因此,3&5的值得1。

   5&7 即 0000 0101 & 0000 0111 = 0000 0101 因此,5&7的值得5。

7、移位運算符

  是用<<(左移) 和 >>(右移) 運算符是用來執行移位運算。

左移 (<<)

將第一個操作數向左移動第二個操作數指定的位數,空出的位置補0。 左移相當于乘.左移一位相當于乘2;左移兩位相當于乘4;左移三位相當于乘8。

x<<1= x*2 x<<2= x*4 x<<3= x*8 x<<4= x*16

同理,右移即相反:

右移 (>>) 將第一個操作數向右移動第二個操作數所指定的位數,空出的位置補0。

右移相當于整除.右移一位相當于除以2;右移兩位相當于除以4;右移三位相當于除以8。

x>>1= x/2 x>>2= x/4 x>>3= x/8 x>>4=x/16

當聲明重載C#移位運算符(這個在第一節中也有一個重載符《+》http://m.survivalescaperooms.com/aehyok/p/3499822.html)時,第一個操作數的類型必須總是包含運算符聲明的類或結構,并且第二個操作數的類型必須總是 int,如:

    class PRogram    {        static void Main(string[] args)        {            ShiftClass shift1 = new ShiftClass(5, 10);            ShiftClass shift2 = shift1 << 2;            ShiftClass shift3 = shift1 >> 2;            Console.WriteLine("{0} << 2 結果是:{1}", shift1.valA, shift2.valA);            Console.WriteLine("{0} << 2 結果是:{1}", shift1.valB, shift2.valB);            Console.WriteLine("{0} >> 2 結果是:{1}", shift1.valA, shift3.valA);            Console.WriteLine("{0} >> 2 結果是:{1}", shift1.valB, shift3.valB);            Console.ReadLine();        }        public class ShiftClass        {            public int valA;            public int valB;            public ShiftClass(int valA, int valB)            {                this.valA = valA;                this.valB = valB;            }            public static ShiftClass Operator <<(ShiftClass shift, int count)            {                int a = shift.valA << count;                int b = shift.valB << count;                return new ShiftClass(a, b);            }            public static ShiftClass operator >>(ShiftClass shift, int count)            {                int a = shift.valA >> count;                int b = shift.valB >> count;                return new ShiftClass(a, b);            }        }    }

8、增量和減量運算符、條件運算符(三元運算符)

這個在第一節中也有提到過http://m.survivalescaperooms.com/aehyok/p/3499822.html

9、命名空間別名限定符

假如你實現了下面的代碼,想打印一下:

Console.WriteLine("Hello World");

接下來再看,我們使用命名空間來進行訪問:

你會發現這兩種方式都無法實現了。那么可以通過如下方式進行調用

        static void Main()        {            global::System.Console.WriteLine("Hello World");        }

global 是 C# 2.0 中新增的關鍵字,理論上說,如果代碼寫得好的話,根本不需要用到它。

就如上面的代碼中寫了一個類,名字叫 System。那么當你再在代碼里寫 System 的時候,編譯器就不知道你是要指你寫的 System 類還是系統的 System 命名空間,而 System 命名空間已經是根命名空間了,無法再通過完全限名來指定。在以前的 C# 版本中,這就是一個無法解決的問題。現在,可以通過global::System 來表示 System根命名空間,而用你自己的MyNamespace.System來表示自己的類。

接下來我們再看一個小例子:

using colAlias = System.Collections;namespace System{    class TestClass    {        static void Main()        {            // Searching the alias:            colAlias::Hashtable test = new colAlias::Hashtable();            // Add items to the table.            test.Add("A", "1");            test.Add("B", "2");            test.Add("C", "3");            foreach (string name in test.Keys)            {                // Seaching the gloabal namespace:                global::System.Console.WriteLine(name + " " + test[name]);            }        }    }}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 毕节市| 巍山| 敖汉旗| 五大连池市| 宁蒗| 巴南区| 图木舒克市| 株洲县| 百色市| 鹿邑县| 绩溪县| 尤溪县| 长寿区| 宜良县| 图片| 廊坊市| 灵武市| 织金县| 梅河口市| 景东| 龙井市| 温州市| 平利县| 纳雍县| 定边县| 仁布县| 富锦市| 郎溪县| 光泽县| 赫章县| 陆丰市| 江阴市| 太湖县| 武宁县| 沾益县| 抚宁县| 河北区| 彰武县| 桦川县| 五华县| 都兰县|