劉鐵猛C#課程筆記——表達式、語句

表達式

表達式由操作數(shù) (operand) 和運算符 (operator) 構成。表達式的運算符指示對操作數(shù)適用什么樣的運算。運算符的示例包括+、-、* 、/ 和 new。操作數(shù)的示例包括文本、字段、局部變量和表達式。
當表達式包含多個運算符時,運算符的優(yōu)先級 (precedence) 控制各運算符的計算順序。例如,表達式 x + y * z 按 x + (y * z) 計算,因為 * 運算符的優(yōu)先級高于 + 運算符。

語句

語句是程序的主體,一般程序都是有很多個語句組成的,C#中的語句主要分為以下幾種:

聲明語句 (declaration statement) 用于聲明局部變量和常量。
表達式語句 (expression statement) 用于對表達式求值??捎米髡Z句的表達式包括方法調(diào)用、使用 new 運算符的對象分配、使用 = 和復合賦值運算符的賦值、使用 ++ 和 -- 運算符的增量和減量運算以及 await 表達式。
選擇語句 (selection statement) 用于根據(jù)表達式的值從若干個給定的語句中選擇一個來執(zhí)行。這一組中有 if 和 switch 語句。
迭代語句 (iteration statement) 用于重復執(zhí)行嵌入語句。這一組中有 while、do、for 和 foreach 語句。
跳轉(zhuǎn)語句 (jump statement) 用于轉(zhuǎn)移控制。這一組中有 break、continue、goto、throw、return 和 yield 語句。
try...catch語句 用于捕獲在塊的執(zhí)行期間發(fā)生的異常,try...finally 語句用于指定終止代碼,不管是否發(fā)生異常,該代碼都始終要執(zhí)行。
checked 語句和 unchecked 語句 用于控制整型算術運算和轉(zhuǎn)換的溢出檢查上下文。
lock 語句 用于獲取某個給定對象的互斥鎖,執(zhí)行一個語句,然后釋放該鎖。
using 語句 用于獲得一個資源,執(zhí)行一個語句,然后釋放該資源。

聲明語句

聲明語句的主要的作用就是聲明一個變量,在C#中主要的聲明方法如下:

int x=1;//聲明整型變量
double x=1.0;//聲明雙精度變量
int[] array = {1,2,3};//聲明數(shù)組變量
int[] array = new int[4]{1,2,3,4};//聲明數(shù)組變量
string s="abcd";//聲明字符串變量
var x=10;//這個是讓編譯器自己去判斷x是什么類型的變量
enum color//聲明枚舉變量
{
    red,
    blue,
    green
};
const int a=10;//聲明常量

表達式語句

在C#中像x+y;和100;這樣的表達式是不允許存在的,因為沒有意義,但是C語言是可以存在的,雖然也沒有意義

選擇語句

這里主要看Switch語句,它的主要結構是:

    switch (表達式)
    {
        case 常量標簽1:
            語句塊1;
            break;
        case 常量標簽2 :
            語句塊2;
            break;
        case 常量標簽3:
            語句塊3;
            break;
        default:
            break;
    }

首先看括號里的表達式,它的要求是得到的結果必須是以下類型:

sbyte、byte、short、ushort、int、uint、long、ulong、bool、char、string 或
enum-type
注意,這里面沒有浮點數(shù),所以這里表達式的結果必須是整數(shù),布爾,字符,字符串,枚舉類型**

下面看這些常量標簽,這些標簽要跟之前的表達式的值想對應,比如表達式的結果是布爾類型,那么這些標簽常量也要是布爾類型的

迭代語句

迭代語句主要就是用于循環(huán)使用,其中for循環(huán)和while循環(huán)和C語言差不多,這里主要講一下foreach,其結構如下:
foreach (var item in collection) { 語句塊; }
這個語句的意思是,用item去訪問collection里的元素,每訪問到一個就執(zhí)行一次語句塊,注意這個collection必須是個集合
什么樣的集合是可以使用foreach語句進行迭代的呢?
如果說一個集合它具有IEnumerable這個接口,那么他就可以使用foeeach語句進行迭代
比如:

image.png

image.png

注:圈起來的冒號后面表示這個類的基類和基接口
下面講講foreach語句的原理,首先看看迭代器IEnumerator的使用

image.png

    class Program
    {
        static void Main(string[] args)
        {
            int[] myArray = new int[]{1,2,3,4,5,6};
            IEnumerator Enumerable = myArray.GetEnumerator();//由于IEnumerable是數(shù)組的基接口,所以這個接口的方法,數(shù)組也可以使用
            while (Enumerable.MoveNext())
            {
                Console.WriteLine(Enumerable.Current);
            }
        }
    }

所以foreach語句的本質(zhì)就是對這種使用迭代器對集合遍歷的方法的簡記法

try...catch語句

這語句是為了防止出現(xiàn)異常,將要可能會出現(xiàn)異常的代碼塊放大try中,如果出現(xiàn)了異常,將會進入到catch語句中,對于異常往往會不止一種。比如int里有一個Parse方法,使用這個方法是將字符串解析成相應格式的值,但是使用過程中就可能出現(xiàn)輸入的字符串為空,和不能轉(zhuǎn)成整型的字符,或者大于整型的最大值,這幾種情況,這個時候就會出現(xiàn)異常

image.png

所以這個時候catch的分支可能就不止一個,但是它只能執(zhí)行一個,因為運行try時在某個時刻出現(xiàn)了一個異常就直接跳到相應的catch分支里了,當然也可以只用一個分支這樣無論是哪種異常都會進入這個分支里

 static void Main(string[] args)
        {
            string s;
            s=Console.ReadLine();
            if (s == "null")
            {
                s = null;
            }
            try
            {
                int x;
                x = int.Parse(s);
                x++;
                Console.WriteLine(x);            
            }
            catch (ArgumentNullException)//這個括號里寫的就是異常的名稱,也可以不寫,不寫就是有異常就會到這個分支來
            {
                Console.WriteLine("The exception is ArgumentNullException!");
            }
            catch(FormatException)
            {
                Console.WriteLine("The exception is FormatException!");
            }
            catch(OverflowException)
            {
                Console.WriteLine("The exception is OverflowException!");
            }
        }

運行結果如下:


image.png

對于try·····catch語句還可以加個finally分支在最后,這個分支是不管有沒有異常都會進行的

checked 語句和 unchecked 語句

這語句主要就是檢查checked語句所包含的代碼塊是否有溢出,默認情況所寫的代碼都是處于unchecked語句里的

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容