程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 2、C#核心編程結構,

2、C#核心編程結構,

編輯:C#入門知識

2、C#核心編程結構,


 本學習主要參考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#定義了一組用於表示局部變量、成員變量、返回值以及輸入參數的基本數據類型。如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基本數據類型都有一個類層次結構,累的層次結構頂端的類型會為派生類型提供一些默認行為。這些核心類型之間的關系如下圖所示:      數值數據類型的成員:我們為了繼續研究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等同於int var 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#支持的條件和迭代語句。接下來的一小節我們將會完成對和新語言特性的研究

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved