官术网_书友最值得收藏!

第2章 踏上C#開發的征程

本章概覽

要學習C#編程,必然要熟悉C#程序的結構,而為了養成良好的編碼習慣,在學習C#之初,熟悉常用的C#程序編寫規范也是非常重要的。本章將詳細介紹如何編寫C#程序,以及C#程序的基本結構;另外,將對C#程序的常用編寫規范進行介紹。

知識框架

2.1 編寫第一個C#程序

在大多數編程學習過程中,編寫的第一個程序通常都是輸出“Hello World”。這里將使用Visual Studio 2017和C#來編寫這個程序。首先介紹使用Visual Studio 2017開發C#程序的基本步驟,如圖2.1所示。

圖2.1 使用Visual Studio 2017開發C#程序的基本步驟

通過圖2.1中的3個步驟,開發人員可以很方便地創建并運行一個C#程序。例如,使用Visual Studio 2017在控制臺中創建輸出“Hello World”的程序并運行,具體開發步驟如下。

步驟1,在系統的開始菜單中依次選擇“所有程序”→“Visual Studio 2017”,打開Visual Studio 2017。

說明:對于Windows 10操作系統,在開始菜單中單擊“Visual Studio 2017”即可打開Visual Studio2017。

步驟2,依次選擇Visual Studio 2017工具欄中的“文件”→“新建”→“項目”,打開“新建項目”對話框,如圖2.2所示。

圖2.2 “新建項目”對話框

說明:圖2.2中的程序保存路徑可以設置為計算機中的任意路徑。

步驟3,按照如圖2.2所示步驟創建一個控制臺應用程序。

步驟4,控制臺應用程序創建完成后,會自動打開Program.cs文件,在該文件的Main方法中輸入如下代碼。

代碼注解

第1行代碼是自動生成的Main方法,用來作為程序的主入口方法。每個C#程序都必須有一個Main方法。

第3行代碼中的Console.WriteLine方法主要用來向控制臺輸出內容。

第4行代碼中的Console.ReadLine方法主要用來獲取控制臺的輸出內容,這里用來將控制臺窗體定位到桌面上。

單擊Visual Studio 2017工具欄中的圖標按鈕,運行該程序,效果如圖2.3所示。

圖2.3 輸出“Hello World”

在上面的代碼中,使用C#輸出了“Hello World”,下面通過一個實例介紹如何在C#中輸出中文內容。

示例1.輸出“人因夢想而偉大”

創建一個控制臺應用程序,使用Console.WriteLine方法輸出“人因夢想而偉大”,完整代碼如下。

代碼注解

第1行到第4行代碼是自動生成的代碼,用來引用默認的命名空間。

第6行代碼是自動生成的命名空間,該命名空間的名稱默認與創建的項目名稱相同,開發人員可以手動修改。

第8行代碼是自動生成的一個Program類,該類是C#程序的啟動類,類的名稱可以手動修改。

輸出中文字符串代碼的運行結果如圖2.4所示。

圖2.4 輸出中文字符串代碼的運行結果

2.2 C#程序結構預覽

上面講解了如何創建第一個C#程序輸出“Hello World”,完整的代碼效果如圖2.5所示。

圖2.5 輸出“Hello World”的程序的完整代碼效果

從圖2.5中可以看出,一個C#程序總體可以分為命名空間、類、關鍵字、標識符、Main方法、C#語句和注釋等。本節將分別對C#程序的各個組成部分進行講解。

2.2.1 命名空間

在使用Visual Studio創建項目時,會自動生成一個與項目名稱相同的命名空間。例如,在創建輸出“Hello_World”項目時,會自動生成一個名稱為“Hello_World”的命名空間,如圖2.6所示。

圖2.6 自動生成的命名空間

命名空間在C#程序中起到組成程序的作用。在C#程序中定義命名空間時,需要使用namespace關鍵字,其語法如下。

說明:開發人員一般不用自定義命名空間,因為在創建項目或創建類文件時,Visual Studio會自動生成一個命名空間。

命名空間既作為程序的“內部”組織系統,也作為向“外部”公開(一種向其他程序公開自己擁有的程序元素的方法)的組織系統。如果要調用某個命名空間中的類或方法,首先需要使用using指令引入命名空間,這樣,就可以直接使用該命名空間中所包含的成員(包括類及類中的屬性、方法等)了。

using指令的基本形式如下。

說明:C#程序的命名空間就像一個包含不同類型物品的倉庫,而using指令就好比一把鑰匙,命名空間的名稱就好比倉庫的名稱,用戶可以通過鑰匙打開指定名稱的倉庫,進而從倉庫中獲取所需要的物品,其示意圖如圖2.7所示。

圖2.7 命名空間與倉庫對比示意圖

例如,下面的代碼定義了一個Demo命名空間。

定義完命名空間后,如果要使用命名空間中所包含的類,需要使用using指令引用命名空間。例如,下面的代碼使用using指令引用自定義的Demo命名空間。

常見錯誤

如果在使用指定命名空間中的類時,沒有使用using指令引用命名空間,如下面的代碼所示,則會出現如圖2.8所示的錯誤提示信息。

圖2.8 沒有引用命名空間而使用其中的類時出現的錯誤

要修改以上代碼,可以直接在命名空間區域使用using指令引用Demo命名空間,代碼如下。

多學兩招

在使用命名空間中的類時,如果不想用using指令引用命名空間,可以在代碼中使用命名空間調用其中的類。例如,下面的代碼直接使用Demo命名空間調用其中的Operation類。

2.2.2 類

C#程序的主要功能代碼都是在類中實現的。類是一種數據結構,可以封裝數據成員、方法成員和其他的類。因此,類是C#的核心和基本構成模塊。C#支持自定義類,使用C#編程就是編寫自己的類來描述實際需要解決的問題。

說明:如果把命名空間比作一個醫院,類就相當于該醫院的各個科室,如外科、婦科、內科、中醫科等,各科室都有自己的工作方法,相當于在類中定義的變量、方法等。命名空間與類的關系示意圖如圖2.9所示。

圖2.9 命名空間與類的關系示意圖

在使用類之前都必須先進行聲明,一個類一旦被聲明,就可以作為一種新的類型來使用。在C#中通過class關鍵字來聲明類,聲明語法如下。

說明:在聲明類時,還可以指定類的修飾符和其要繼承的基類或者接口等信息,在這里只要知道如何聲明一個最基本的類即可。關于類的詳細內容,會在第7章中進行專題講解。

在上面的語法中命名類的名稱時,最好能夠體現類的含義或用途。類名一般采用第一個字母大寫的名詞,也可以采用多個詞構成的組合詞。

例如,聲明一個汽車類Car(該類沒有任何意義,只演示如何聲明一個類),代碼如下。

2.2.3 關鍵字與標識符

1.關鍵字

關鍵字是C#中已經被賦予特定意義的一些單詞,在開發程序時,不可以把這些關鍵字作為命名空間、類、方法或屬性等來使用。在輸出“Hello World”的程序中,using、namespace、class、static和void等都是關鍵字。C#中的常用關鍵字如表2.1所示。

表2.1 C#中的常用關鍵字

常見錯誤

如果在開發程序時,使用C#中的關鍵字作為命名空間、類、方法或屬性等的名稱,如下面的代碼使用C#關鍵字void作為類的名稱,則會出現如圖2.10所示的錯誤提示信息。

圖2.10 使用C#關鍵字作為類名時的錯誤提示信息

2.標識符

標識符可以簡單地理解為一個名字,比如,每個人都有自己的名字。它主要用來標識類名、變量名、方法名、屬性名、數組名等各種成員。

C#標識符命名規則如下。

·由任意順序的字母、下畫線(_)和數字組成。

·第一個字符不能是數字。

·不能是C#中的保留關鍵字。

下面是合法的標識符。

下面是非法標識符。

注意:C#標識符不包含#、%或$等特殊字符。

在C#中,標識符中的字母是嚴格區分大小寫的,兩個同樣的單詞,如果大小寫格式不一樣,所代表的意義是完全不同的。例如,下面3個變量是完全獨立、毫無關系的,就像3個長得比較像的人,都是獨立的個體。

說明:在C#中允許使用漢字作為標識符,如“class 運算類”,在程序運行時不會出現錯誤,但建議讀者盡量不要使用漢字作為標識符。

2.2.4 Main方法

在Visual Studio中創建控制臺應用程序后,會自動生成一個Program.cs文件,該文件有一個默認的Main方法,代碼如下。

每個C#程序都必須包含一個Main方法,它是類體中的主方法,也稱為主入口方法,可以說是激活整個程序的開關。Main方法從“{”開始,至“}”結束。static和void分別是Main方法的靜態修飾符和返回值修飾符,C#程序中的Main方法必須聲明為static,并且區分大小寫。

常見錯誤

如果將Main方法前面的static關鍵字刪除,則程序在運行時會出現如圖2.11所示的錯誤提示信息。

圖2.11 刪除static關鍵字后Main方法出現的錯誤提示信息

Main方法一般都是在創建項目時自動生成的,不用開發人員手動編寫或修改。如果需要修改,則需要注意以下3個方面。

·Main方法在類或結構內聲明,它必須是靜態的,而且不應該是公用的。

·Main方法的返回類型有兩種:void或int。

·Main方法可以包含命令行參數string[] args,也可以不包括。

根據以上3個注意方面,可以總結出,Main方法有以下4種聲明方式。

技巧:通常在Main方法中不寫具體邏輯代碼,只進行類實例化和方法調用(好比手機來電話了,只需要按“接通”鍵就可以通話,而不需要考慮手機通過怎樣的信號轉換將電磁信號轉化成聲音)。這樣的代碼簡潔明了,容易維護。良好的編碼習慣,可以讓程序員的工作事半功倍。

2.2.5 C#語句

C#語句是構造所有C#程序的基本單位。使用C#語句可以聲明變量和常量、調用方法、創建對象或執行任何邏輯操作。C#語句以分號終止。

例如,在輸出“Hello World”的程序中輸出“Hello World”字符串和定位控制臺的代碼就是C#語句。

上面的代碼是兩條最基本的C#語句,用來在控制臺中輸出內容和讀取內容,它們都用到了Console類。Console類表示控制臺應用程序的標準輸入流、標準輸出流和錯誤流,該類中包含很多方法,與輸入、輸出相關的主要有4個方法,如表2.2所示。

表2.2 Console類中與輸入、輸出相關的方法

Console.Read方法和Console.ReadLine方法用于從控制臺讀入,它們的使用區別如下。

·Console.Read方法:返回值為int類型,只能記錄int類型的數據。

·Console.ReadLine方法:返回值為string類型,可以將控制臺中輸入的任何類型的數據存儲為字符串類型的數據。

技巧:在開發控制臺應用程序時,經常使用Console.Read方法或Console.ReadLine方法定位控制臺窗體。

Console.Write方法和Console.WriteLine方法用來向控制臺輸出,它們的使用區別如下。

·Console.Write方法:輸出后不換行。

例如,使用Console.Write方法輸出“Hello World”字符串,代碼如下,代碼的運行效果如圖2.12所示。

圖2.12 使用Console.Write方法輸出“Hello World”字符串代碼的運行效果

·Console.WriteLine方法:輸出后換行。

例如,使用Console.WriteLine方法輸出“Hello World”字符串,代碼如下,代碼的運行效果如圖2.13所示。

圖2.13 使用Console.WriteLine方法輸出“Hello World”字符串代碼的運行效果

注意:C#代碼中所有的字母、數字、括號及標點符號均為英文輸入法狀態下的半角符號,而不能是中文輸入法或英文輸入法狀態下的全角符號。例如,如圖2.14所示為中文輸入法的分號引起的錯誤。

圖2.14 中文輸入法的分號引起的錯誤

2.2.6 注釋

注釋是在編譯程序時不會執行的代碼或文字,其主要功能是對某行或某段代碼進行說明,以方便代碼的理解與維護,或者在調試程序時,將某行或某段代碼設置為無效代碼。常用的注釋主要有行注釋和塊注釋兩種,下面分別對其進行介紹。

說明:注釋就像超市中各商品下面的價格標簽,對商品的名稱、價格、產地等信息進行說明,如圖2.15所示。而在程序中,注釋最基本的功能就是描述代碼的作用。

圖2.15 超市中各商品下面的價格標簽相當于注釋

1.行注釋

在C#代碼中,行注釋都以“//”開頭,后跟注釋的內容。例如,在輸出“Hello World”的程序中使用行注釋,解釋每一行代碼的作用,代碼如下。

注意:注釋可以出現在代碼的任意位置,但是不能分隔關鍵字和標識符。例如,下面的代碼注釋是錯誤的。

2.塊注釋

如果注釋的行數較少,一般使用行注釋。對于連續多行的大段注釋,則使用塊注釋,塊注釋通常以“/*”開始,以“*/”結束,注釋的內容放在它們之間。

例如,在輸出“Hello World”的程序中使用塊注釋將輸出Hello World字符串和定位控制臺窗體的C#語句注釋為無效代碼,代碼如下。

技巧:塊注釋通常用來為類文件、類或方法等添加版權、功能等信息。例如,下面的代碼使用塊注釋為Program.cs類添加版權、功能及修改日志等信息。

2.2.7 一個完整的C#程序

通過以上內容的講解,我們熟悉了C#程序的基本組成,下面通過一個示例講解如何編寫一個完整的C#程序。

示例2.輸出軟件啟動頁

使用Visual Studio 2017創建一個控制臺應用程序,然后使用Console.WriteLine方法在控制臺模擬輸出“編程詞典(珍藏版)”軟件的啟動頁,代碼如下。

完成以上操作后,單擊Visual Studio 2017工具欄中的圖標按鈕即可運行上面的代碼,代碼運行結果如圖2.16所示。

圖2.16 輸出軟件啟動頁代碼運行結果

2.3 程序編寫規范

下面給出兩段實現同樣功能的C#代碼,如圖2.17所示。

圖2.17 兩段實現同樣功能的C#代碼

大家在學習時,愿意閱讀圖2.17中的左側代碼還是右側代碼?相信大家更喜歡閱讀圖2.17中的右側代碼,因為它看上去更加規整——這是一種基本的代碼編寫規范。本節將對C#代碼的編寫規則及命名規范進行介紹。遵循一定的代碼編寫規則和命名規范可以使代碼更加規范化,對代碼的理解與維護起到至關重要的作用。

2.3.1 代碼編寫規則

代碼編寫規則通常對應用程序的功能沒有影響,但對于改善對源代碼的理解是有幫助的。養成良好的代碼編寫習慣對于軟件的開發和維護都是很有益的,下面列舉一些常用的代碼編寫規則。

·在編寫C#程序時,統一代碼縮進的樣式,比如統一縮進2個字符或4個字符。

·每寫完一行C#代碼,都應該換行編寫下一行代碼。

·在編寫C#代碼時,應該合理使用空格,以便使代碼結構更加清晰。

·盡量使用接口,然后使用類實現接口,以提高程序的靈活性。

·關鍵的語句(包括聲明關鍵的變量)必須要寫注釋。

·建議局部變量在最接近使用它的地方聲明。

·盡量不要使用goto系列語句,除非是在跳出深層循環時。

·避免編寫超過5個參數的方法。如果要傳遞多個參數,應使用結構。

·避免編寫代碼量過大的try-catch語句塊。

·避免在同一個文件中編寫多個類。

·在生成和構建一個長的字符串時,一定要使用StringBuilder類型,而不要使用string類型。

·對于if語句,應該使用一對“{ }”把語句塊包含起來。

·對于switch語句,一定要有default語句來處理意外情況。

2.3.2 命名規范

命名規范在編寫代碼中起著很重要的作用,雖然不遵循命名規范程序也可以運行,但是使用命名規范可以更加直觀地了解代碼所代表的含義。本小節將介紹C#中常用的一些命名規范。

1.兩種命名方法

在C#中,常用的命名方法有兩種,分別是Pascal命名法和Camel命名法,下面分別對其進行介紹。

·用Pascal命名法來命名方法和類型。Pascal命名法的第一個字母必須為大寫,并且后面連接詞的第一個字母也為大寫。

說明:Pascal是以紀念法國數學家Blaise Pascal而命名的一種編程語言,C#中的Pascal命名法就是根據該語言的特點總結出來的一種命名方法。

例如,定義一個公共類,并在此類中創建一個公共方法,代碼如下。

·用Camel命名法來命名局部變量和方法的參數。Camel命名法指名稱中第一個單詞的第一個字母為小寫。

說明:Camel命名法又稱為駝峰式命名法,它是由駱駝的體型特征推理出來的一種命名方法。

例如,聲明一個字符串變量和創建一個公共方法,代碼如下。

2.程序中的命名規范

在開發項目時,不可避免地會遇到各個程序元素的命名問題,比如項目的命名、類的命名、方法的命名等。例如,在圖2.18中聲明了一個User類,在圖2.19中聲明了一個aaa類。

圖2.18 聲明User類

圖2.19 聲明aaa類

從類的命名上可以很容易地看出,圖2.18中的User類應該是與用戶相關的一個類,但是對于圖2.19中聲明的aaa類,很難對其功能進行直觀判斷。從這兩個例子可以看出,在對程序元素進行命名時,如果遵循一定的規范,將使代碼更加具有可讀性。下面介紹常用程序元素的基本命名規范。

·在命名項目名稱時,可以使用公司域名+產品名稱,或者直接使用產品名稱。

例如,利用公司名和產品名定義命名空間,在命名項目時,可以將項目命名為“mingrisoft.ERP”或“ERP”,其中,mingrisoft是公司的域名,ERP是產品名稱。

·用有意義的名字定義命名空間,如公司名、產品名。

例如,利用公司名和產品名定義命名空間,代碼如下。

·接口的名稱加前綴“I”。

例如,創建一個公共接口Iconvertible,代碼如下。

·類的命名最好能夠體現出類的功能或操作。

例如,創建一個名稱為Operation的類,用來作為運算類,代碼如下。

·方法的命名:一般將其命名為動賓短語,表明該方法的主要作用。

例如,在公共類File中創建CreateFile方法和GetPath方法,代碼如下。

·定義成員變量時,最好加前綴“_”。

例如,在公共類DataBase中聲明一個私有成員變量_connectionString,代碼如下。

2.4 小結

本章主要介紹了C#程序的結構、代碼編寫規則和命名規范。在C#程序的結構中,讀者需要重點掌握命名空間、類及C#語句。其中,命名空間在C#程序中占有重要的地位,通過引入命名空間可以將命名空間下的類引入當前項目;類是C#的核心和基本構成模塊,開發人員可以通過編寫各種類來描述在實際開發中需要解決的問題;語句是構造所有C#程序的基本單位,程序中的任何邏輯操作都需要通過C#語句實現。另外,在編寫程序代碼時,讀者要養成一種良好的編寫習慣,本章列出的一些常用的代碼編寫規則和命名規范,希望對讀者有所幫助。

2.5 快學快用

(1)在控制臺應用程序中輸出馬云在阿里巴巴上市時說的一句經典語錄:“夢想還是要有的,萬一實現了呢!”

(2)使用C#在控制臺輸出“情人節快樂”圖案,程序運行結果如圖2.20所示。

圖2.20 在控制臺輸出“情人節快樂”圖案程序的運行結果

(3)在控制臺應用程序中模擬以下場景。

計算機輸出“歡迎使用XXX充值業務,請輸入充值金額:”。

用戶輸入“100”。

計算機輸出“充值成功,您本次充值100元”。

(4)使用C#在控制臺輸出百花園圖案,程序運行結果如圖2.21所示。

圖2.21 輸出百花園圖案程序的運行結果

主站蜘蛛池模板: 赫章县| 湟源县| 新竹县| 乐都县| 定兴县| 宁海县| 项城市| 雷州市| 英山县| 康定县| 永平县| 定州市| 新乐市| 盘山县| 长子县| 磴口县| 城口县| 永福县| 万盛区| 潮州市| 揭西县| 泰兴市| 韩城市| 焦作市| 集贤县| 铜川市| 鹤壁市| 五莲县| 张家口市| 达州市| 高碑店市| 河北省| 嵩明县| 通州市| 会理县| 财经| 天长市| 平凉市| 上高县| 寻甸| 蓝山县|