標籤:
本學習主要參考Andrew Troelsen的C#與.NET4進階程式設計,這小節主要述說以下幾個東西:Hello World的Main方法:利用VS2010建立一個控制台應用程式Hello World,完善代碼如下:類和Main方法:這裡系統自動建立了一個叫做Program的類,並且裡面有個預設的Main方法。在這裡,我們程式的類名可以任意的修改,但是Main()方法卻必須唯一,修改之後運行會出錯。因為Main()方法是我們這個應用程式的入口。錯誤提示如下:Main方法是引用程式的入口,處理邏輯都在Main方法內部。而預設,我們產生了一個靜態、有void(空)傳回值,接受一個參數字串數組的形式。不過,這不是Main方法的唯一形式,除此之外,我們還有以下幾個簽名形式。如果定義的入口函數非空傳回值,那麼我們必須要程式結束的時候提供一個傳回值。(傳回值0表示正常結束):static int Main(string[] args){ //處理邏輯 return 0;}//無參數無傳回值static void Main(){}//無參數有傳回值static int Main(){ return 0;}查看參數,可以通過System.Environment類的成員來實現。(Environment.GetCommandLineArgs()),該函數返回一個string數組,可以通過遍曆查詢該返回數組得到參數。System.Console類,該類主要有如下三個功能:1、進行基本的輸入輸出。如上代碼WriteLine方法表示輸出在控制台,而ReadLine則表示接受一個輸入。除此之外,還有Write和Read方法,用法和他們類似。2、格式化控制台輸出。可以用預留位置來格式化,形式如:Console.WriteLine("{0},{1}",123,456);其中預留位置的數字對應後面輸出參數的次序,從0開始。並且預留位置可以不分先後。3、格式化數值資料。類似於C語言和C++裡面的%d,%x的表示輸出數字和十六進位格式,這裡面可以用D/d和X/x。用法:Console.WriteLine("c format:{0:c}", 9999);4、除此之外,在控制台應用程式外格式化數值資料。利用string.Format()方法來格式化,用法:string userNum = string.Format("100000 in hex is {0:x}", 100000); 系統資料類型和C#簡化符號:和任何程式設計語言一樣,C#定義了一組用於表示局部變數、成員變數、傳回值以及輸入參數的基礎資料型別 (Elementary Data Type)。如bool、byte、short、int、long等。不過,和其他的程式設計語言不同,這些關鍵字不只是簡單的編譯器可以識別的標記,C#資料類型關鍵字其實是System命名空間中完整類型的簡化符號,如ulong是System.UInt64的簡寫。變數聲明和初始化:int myInt; string myString;初始化可以直接賦值int myInt=0;也可以如此,int a=1,b=2,c=a;內建資料類型和new操作符:所有的內建資料類型都支援預設建構函式,這些類型可以用new開建立。如bool類型,也可以如此表示:bool b=new bool();資料類型類的階層:.net基礎資料型別 (Elementary Data Type)都有一個類階層,累的階層頂端的類型會為衍生類別型提供一些預設行為。這些核心類型之間的關係如所示: 數值資料類型的成員:我們為了繼續研究C#的資料類型,必須知道.net的數實值型別支援MaxValue和MinValue屬性,這兩個屬性說明了給定的類型可以儲存的範圍。用法,int.MaxValue,double.MaxValue等。System.Boolean成員:它不支援MinValue和MaxValue,因為他只能來源於集合{true|false}。但卻支援TrueString和FalseString屬性集合(相應地返回True或False)。System.Char成員:C#的文本資料是由string和char關鍵字表示的,兩者都是基於Unicode的。string表示連續字元,char表示單個字元。從字串資料中解析數值(.Parse()方法):這個技術在想把使用者輸入的資料轉換成一個數值的時候非常有用。用法int i=int.Parse("8");System.DateTime和System.TimeSpan:DateTime表示日期時間,而TimeSpan則允許你方便的使用各個成員定義和轉換時間單位。.net 4 System.Numerics命名空間:它定義了一個BigInteger結構,用來表示較大的數值,它沒有固定的上下限。 使用字串資料:基底字元串操作:string.Length擷取字串長度、string.ToUpper擷取字串變成大寫的值、string.ToLower擷取字串變成小寫值。字串拼接:string.Concat(),不過我們也可以通過+號來表示拼接。兩者的編譯結果是一樣的。逸出字元:和C一樣,都是反斜線\,可以將C#中的特殊字元原本的表達出來。定義逐字字串:C#中引入了以@為首碼的字串字面量激發,屬於稱為逐字字串。使用它的字串就不用使用逸出字元了。字串和相等性:用String的Equals方法或內嵌的相等操作符(==等)來進行相等性操作,這裡表示指的是區分大小寫、逐字元的相等性操作,雖然String類型是參考型別。字串是不可變的:string類型的方法,氣勢反悔了一個按修改格式的新字串對象,原來的字串不會改變的。所以,string類如果被濫用,它就會變得低效、並導致代碼膨脹,特別是在字串拼接的時候。(因為每次操作都要在託管堆上載入一個新的字串對象,原有的最終會被記憶體回收)System.Text.StringBuilder類型:此類和System.String類相似,不過為了防止String類出現的低效問題,StringBuilder定義了很多用來替換和格式化片段的方法。它的獨特之處在於,當我們調用這個類型的成員時,都是直接修改對象內部的字元資料(因此更高效),而不是或許按修改後格式的資料副本。 窄化和寬化資料類型轉換:即大值和小值只見的運算由於C#是型別安全的,窄化運算會有錯誤,不過,可以通過強制轉換來窄化,但這樣很可能造成資料丟失。C#提供的checked和unchecked關鍵字將確保資料修士肯定會被檢測到。checked的用法:用在一句代碼裡如下:byte sum=checked((byte)Add(b1,b2));用在一個語句塊上,檢測是不是強制溢出:checked{ byte sum=(byte)Add(b1,b2); Console.WriteLine(sum);}unchecked關鍵字和checked的關鍵字用法一樣,只不過他會檢查所有運算邏輯,進位個別情況系跑出語出的異常。System.Convert的作用:使用它的一個好處是,它提供了語言無關的方式來進行資料類型的轉換(例如,VB的類型轉換完全不同的C#)。 隱含型別區域變數(var):C#語言定義了一種可以使用var關鍵字建立隱式類型的本地變數。使用var關鍵字不必指定具體的資料類型(如int、bool、string)。這麼做時,編譯器將根據本機資料點的初始值類自動推斷實際的資料類型。用法如下:var myInt=0;//表示定義的是個整形,var等同於intvar myBool=true;//表示定義是個布爾值。其中var等同於bool隱式類型變數的限制:首先,隱式類型只能用於方法或屬性範圍內的本地變數。用var關鍵字定義傳回值、參數或者自訂類型的欄位資料都是不合法的。同樣,用var關鍵字聲明的本地變數必須在聲明時分配初始值,並且這個初始值不能為null。最後,用C#的?標記定義可控的隱含型別區域變數是不合法的。隱式類型資料是強型別資料:隱式類型變數在編譯時間影響變數的生命,之後該資料點將被視為它生命的類型,為該變數分配不同的類型將會導致編譯時間錯誤。隱式類型變數用途:在Linq查詢中將會變得非常有用。 C#迭代結構:for迴圈,同C和C++中的for迴圈用法一樣,我們可以建立複雜的終止條件,構建無限迴圈,使用goto、continue、break關鍵字。foreach/in迴圈:C#foreach關鍵字允許遍曆數組中的所有項,不需要測試數組的上線。foreach結構中使用var,此時,編譯器可以準確的判斷出該類型的準確的類型。while和do/while迴圈:當希望執行一段語句直到滿足某個終止條件時,while迴圈結構很有用。和簡單的while迴圈類似,當我們需要進行一些次數補丁的動作時,可以使用do/while迴圈。兩者的區別是,do/while迴圈肯定會執行至少一次對應的代碼塊,而while迴圈則有可能不會執行就結束。 條件結構和關係/相等操作符:if/else語句:C#中的if/else語句只能範圍布林運算式,不能用於諸如-1、0這樣的值,因此if/else語句通常會包含一些C#操作符。(==、!=、<、>、<=、>=以及邏輯操作符&&、||、!)。說明:&&和||操作符在必要時都會‘短路’,也就是說,如果一個運算式被確定為false,其他的運算式就不會被檢查了。switch語句:和C系列語言中的一樣,switch語句允許我們根據定義的選擇來處理常式流程。C#要求每一個case(包含default)包含以break或goto終止的可執行語句來避免失敗。 小結:這一小節我們瞭解了每一個C#可執行程式的一些基本的結構,以及探討了一些C#內建資料類型的細節。並且介紹了var隱式關鍵字和C#支援的條件和迭代語句。接下來的一小節我們將會完成對和新語言特性的研究
2、C#核心編程結構