- C#從入門到精通(微視頻精編版)
- 明日科技
- 6155字
- 2020-03-06 11:53:24
第2章 初識C#程序結構
(
視頻講解:1小時13分鐘)
要學習C#編程,必然要熟悉C#程序的結構,而為了能夠養成一個良好的編碼習慣,在學習C#之初,熟悉常用的C#程序編寫規范也是非常重要的。本章將詳細介紹如何編寫一個C#程序,以及C#程序的基本結構;另外,還對C#程序的常用編寫規范進行介紹。
通過學習本章,讀者主要掌握以下內容:
使用Visual Studio 2017開發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 Studio 2017開發環境。
(2)選擇Visual Studio 2017工具欄中的“文件”→“新建”→“項目”命令,打開“新建項目”對話框,如圖2.2所示。

圖2.2 “新建項目”對話框
說明
圖2.2中的項目保存路徑可以設置為計算機上的任意路徑。
(3)按照圖2.2中的步驟創建一個控制臺應用程序。
(4)控制臺應用程序創建完成后,會自動打開Program.cs文件,在該文件的Main方法中輸入如下代碼:

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

圖2.3 輸出“Hello World”
上面的代碼中,使用C#輸出了開發人員進入“編程世界”后遇到的一個最經典語句“Hello World”,下面通過一個符合中國人習慣的實例看一下如何在C#中輸出中文內容。
【例2.01】使用數組保存數據創建一個控制臺應用程序,使用Console.WriteLine方法輸出小米董事長雷軍的經典語錄“人因夢想而偉大”,完整代碼如下:(實例位置:資源包\源碼\02\2.01)

程序運行效果如圖2.4所示。

圖2.4 輸出中文字符串
2.2 C#程序結構預覽

視頻講解
上面講解了如何創建第一個C#程序,其完整代碼效果如圖2.5所示。

圖2.5 Hello World程序完整代碼效果
從圖2.5中可以看出,一個C#程序總體可以分為命名空間、類、關鍵字、標識符、Main方法、語句和注釋等。本節將分別對C#程序的各個組成部分進行講解。
2.2.1 命名空間
在Visual Studio開發環境中創建項目時,會自動生成一個與項目名稱相同的命名空間,例如,2.1節中創建“Hello_World”項目時,會自動生成一個名稱為“Hello_World”的命名空間,如圖2.6所示。

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

說明
開發人員一般不用自定義命名空間,因為在創建項目或者創建類文件時,Visual Studio開發環境會自動生成一個命名空間。
命名空間既用作程序的“內部”組織系統,也用作向“外部”公開的組織系統(即一種向其他程序公開自己擁有的程序元素的方法)。如果要調用某個命名空間中的類或者方法,首先需要使用using指令引入命名空間,這樣,就可以直接使用該命名空間中所包含的成員(包括類及類中的屬性、方法等)。
using指令的基本形式為:

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

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

常見錯誤
如果在使用指定命名空間中的類時,沒有使用using引用命名空間,如下面的代碼:

則會出現如圖2.7所示的錯誤提示信息。
要改正以上代碼,可以直接在命名空間區域使用using引用Demo命名空間,代碼如下:


圖2.7 沒有引用命名空間而使用其中的類時出現的錯誤
多學兩招
在使用命名空間中的類時,如果不想用using指令引用命名空間,可以在代碼中使用命名空間調用其中的類,例如,下面代碼直接使用Demo命名空間調用其中的Operation類:

2.2.2 類
C#程序的主要功能代碼都是在類中實現的,類是一種數據結構,它可以封裝數據成員、方法成員和其他的類。因此,類是C#語言的核心和基本構成模塊。C#支持自定義類,使用C#編程就是編寫自己的類來描述實際需要解決的問題。
說明
如果把命名空間比作一個醫院,類就相當于該醫院的各個科室,如內科、骨科、泌尿科、眼科等,在各科室中都有自己的工作方法,相當于在類中定義的變量、方法等。
使用類之前都必須首先進行聲明,一個類一旦被聲明,就可以當作一種新的類型來使用,在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.8所示的錯誤提示信息。

圖2.8 使用C#關鍵字作為類名時的錯誤信息
2. 標識符
標識符可以簡單地理解為一個名字,比如每個人都有自己的名字,它主要用來標識類名、變量名、方法名、屬性名、數組名等各種成員。
C#語言標識符命名規則如下:
(1)由任意順序的字母、下畫線(_)和數字組成。
(2)第一個字符不能是數字。
(3)不能是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.9所示的錯誤提示信息。

圖2.9 刪除static關鍵字時Main方法出現的錯誤
Main方法一般都是創建項目時自動生成的,不用開發人員手動編寫或者修改,如果需要修改,則需要注意以下3個方面:
◆ Main方法在類或結構內聲明,它必須是靜態(static)的,而且不應該是公用(public)的。
◆ Main的返回類型有兩種:void或int。
◆ Main方法可以包含命令行參數string [ ] args,也可以不包括。
根據以上3個注意事項,可以總結出,Main方法可以有以下4種聲明方式:

技巧
通常Main方法中不寫具體邏輯代碼,只做類實例化和方法調用。好比手機來電話了,只需要按“接通”鍵就可以通話,而不需要考慮手機通過怎樣的信號轉換將電磁信號轉化成聲音。這樣的代碼簡潔明了,容易維護。養成良好的編碼習慣,可以讓程序員的工作事半功倍。
2.2.5 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.10所示。


圖2.10 使用Console.Write方法輸出“Hello World”字符串
Console.WriteLine方法—輸出后換行
例如,使用Console.WriteLine方法輸出“Hello World”字符串,代碼如下,效果如圖2.11所示。


圖2.11 使用Console.WriteLine方法輸出“Hello World”字符串
注意
C#代碼中所有的字母、數字、括號,以及標點符號均為英文輸入法狀態下的半角符號,而不能是中文輸入法或者英文輸入法狀態下的全角符號。例如,圖2.12為中文輸入法的分號引起的錯誤提示。

圖2.12 中文輸入法的分號引起的錯誤提示
2.2.6 注釋
注釋是在編譯程序時不執行的代碼或文字,其主要功能是對某行或某段代碼進行說明,方便代碼的理解與維護,或者在調試程序時,將某行或某段代碼設置為無效代碼。常用的注釋主要有行注釋和塊注釋兩種,下面分別進行簡單介紹。
說明
注釋就像是超市中各商品下面的價格標簽,對商品的名稱、價格、產地等信息進行說明;而程序中,注釋的最基本作用就是描述代碼的作用,告訴別人你的代碼要實現什么功能。
1. 行注釋
行注釋都以“//”開頭,后面跟注釋的內容。例如,在Hello World程序中使用行注釋,解釋每一行代碼的作用,代碼如下:

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

2. 塊注釋
如果注釋的行數較少,一般使用行注釋。對于連續多行的大段注釋,則使用塊注釋,塊注釋通常以“/*”開始,以“*/”結束,注釋的內容放在它們之間。
例如,在Hello World程序中使用塊注釋將輸出Hello World字符串和定位控制臺窗體的C#語句注釋為無效代碼,代碼如下:

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

2.2.7 一個完整的C#程序
通過以上內容的講解,我們熟悉了C#程序的基本組成,下面通過一個實例講解如何編寫一個完整的C#程序。
【例2.02】 使用Visual Studio 2017開發環境創建一個控制臺應用程序,然后使用Console.WriteLine方法在控制臺中模擬輸出“編程詞典(珍藏版)”軟件的啟動頁。代碼如下:(實例位置:資源包\源碼\02\2.02)

完成以上操作后,單擊Visual Studio 2017開發環境工具欄中的圖標按鈕,即可運行該程序,程序運行結果如圖2.13所示。

圖2.13 輸出軟件啟動頁
2.3 程序編寫規范

視頻講解
下面給出兩段實現同樣功能的代碼,如圖2.14所示。

圖2.14 兩段相同的C#代碼
大家在學習時,愿意看圖2.14中的左側代碼還是右側代碼?答案應該是肯定的,大家肯定都喜歡閱讀圖2.14中的右側代碼,因為它看上去更加規整,這是一種最基本的代碼編寫規范。本節將對C#代碼的編寫規則以及命名規范進行介紹。遵循一定的代碼編寫規則和命名規范可以使代碼更加規范化,對代碼的理解與維護起到至關重要的作用。
2.3.1 代碼編寫規則
代碼編寫規則通常對應用程序的功能沒有影響,但它們對于改善對源代碼的理解是有幫助的。養成良好的習慣對于軟件的開發和維護都是很有益的,下面列舉一些常用的代碼編寫規則。
編寫C#程序時,統一代碼縮進的樣式,例如統一縮進兩個字符或者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.15中聲明了一個User類,圖2.16中聲明了一個aaa類。

圖2.15 聲明User類

圖2.16 聲明aaa類
查看圖2.15和圖2.16,從類的命名上,可以很容易看出,圖2.15中的User類應該是與用戶相關的一個類,但是圖2.16中聲明的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 實戰
2.5.1 實戰一:模擬手機充值業務
在控制臺應用程序中模擬以下場景。
計算機輸出:歡迎使用XXX充值業務,請輸入充值金額:
用戶輸入:100
計算機輸出:充值成功,您本次充值100元。(實例位置:資源包\源碼\02\實戰\01)
2.5.2 實戰二:繪制情人節快樂圖案
使用C#在控制臺中輸出一個情人節快樂圖案,程序運行結果如圖2.17所示。
(實例位置:資源包\源碼\02\實戰\02)

圖2.17 在控制臺中輸出情人節快樂圖案
- INSTANT FreeMarker Starter
- Spring Cloud、Nginx高并發核心編程
- Banana Pi Cookbook
- MySQL數據庫基礎實例教程(微課版)
- Python極簡講義:一本書入門數據分析與機器學習
- Mastering Python Design Patterns
- Mockito Essentials
- 網絡數據采集技術:Java網絡爬蟲實戰
- Python數據可視化之美:專業圖表繪制指南(全彩)
- Mastering jQuery Mobile
- UML基礎與Rose建模實用教程(第三版)
- JavaScript前端開發基礎教程
- Python計算機視覺與深度學習實戰
- HTML并不簡單:Web前端開發精進秘籍
- VMware vRealize Orchestrator Essentials