- C#從入門到精通(第2版)
- 龍馬高新教育策劃 國家863中部軟件孵化器編著
- 2554字
- 2019-01-02 05:29:01
第2章 C#編程入門
本章視頻教學錄像:39分鐘
通過第1章的學習,我們對C#語言和它的開發環境Visual Studio 2013有了一定的了解,在本章中我們將給大家介紹怎樣編寫第一個C#控制臺應用程序、Windows窗體應用程序及怎么使用MSDN和網絡的幫助。
本章要點(已掌握的在方框中打鉤)
□ 創建第1個控制臺應用程序
□ 創建第1個Windows窗體應用程序
□ 學會使用MSDN和網絡
2.1 創建第1個C#程序
本節視頻教學錄像:19分鐘
通過前面的介紹,我們已經對Visual Studio 2013的強大功能有了初步的認識。本節利用Visual Studio 2013創建和編譯第1個C# 應用程序,帶領大家進入C#編程世界。
2.1.1 創建第1個控制臺應用程序
【范例2-1】 使用Visual Studio 2013創建第1個控制臺應用程序。
⑴ 單擊【開始】 【程序】
【Microsoft Visual Studio 2013】
【Microsoft Visual Studio 2013】命令,啟動Visual Studio 2013。如果是第1次使用Visual Studio 2013,會提示用什么語言編寫程序,選擇C#即可。在Visual Studio 2013窗口中選擇【新建】
【項目】,在彈出的【新建項目】窗口中的【模板】中選擇【Visual C#】,然后選擇【控制臺應用程序】,在【名稱】文本框中輸入項目名稱“HelloCSharp”,并選擇項目保存的【位置】(如D:\用戶目錄\documents\visual studio 2013\Projects)。

⑵ 單擊【確定】按鈕,直接打開“Program.cs”的代碼窗口,并且會自動產生如下的代碼。
01 using System; 02 using System.Collections.Generic; 03 using System.Linq; 04 using System.Text; 05 using System.Threading.Tasks; 06 namespace HelloCSharp 07 { 08 class Program 09 { 10 static void Main(string[]args) 11 { 12 }
13 } 14 }
⑶ 在Program.cs中的Main方法中輸入以下代碼(代碼1-1.txt),如下圖所示。
01 Console.WriteLine("Hello C#4.5"); 02 Console.ReadKey();

技巧
C#是一種對大小寫特別敏感的編程語言,在拼寫Main時,首字母必須大寫。另外,程序中的Main函數必須為static類型。
⑷ 選擇【生成】【生成解決方案】菜單命令,開始編譯,如沒有編譯錯誤,輸出窗口將顯示生成成功的字樣;如有錯誤,錯誤將在錯誤窗口中列出。
【代碼詳解】
Program.cs中的第1~5行代碼是導入的命名空間,這是創建控制臺應用程序時自動生成的,不用管它,最好不要動。第6行中namespace的后面是本項目命名空間,默認和項目名稱一樣。系統自動生成一個包含Main方法的Program類,自己想運行的代碼一般都寫在Main方法中。第12行代碼是用戶自己輸入的,能在控制臺輸出“Hello C# 4.5”。第13行代碼表示等待用戶輸入任意鍵。
【運行結果】
選擇【調試】【啟動調試】菜單命令或單擊
按鈕,即可在控制臺中輸出結果,如下圖所示。

提示
運行此程序時,這個控制臺窗口會一閃而過。如果按【Ctrl+F5】組合鍵不調試直接運行,窗口就會停住。添加Console.ReadKey()或Console.Read()語句可以使運行暫停,按任意鍵繼續,這樣就能看清楚運行結果了。
【范例分析】
在這個程序中為什么會輸出“Hello C# 4.5”呢?全靠步驟⑶中的Console.WriteLine方法。該方法是CLR庫中“Console”類的輸出方法之一,這個類就包含在命名空間System中,所以說系統自動生成的代碼也是不可或缺的,如果去掉了“using System;”這行代碼,就會提示當前上下文中不存在名稱“Console”。另一方面,自動生成可以省去很多操作。
從這個程序中可以看出C#程序的以下幾個典型特點。
⑴ 可以使用系統內的命名空間,如“using System;”,也可以自定義命名空間,如“namespace HelloWorld”。
⑵ 方法的定義,如第10行代碼定義的是Main方法,程序是從這里開始執行的。
⑶ 類的聲明,如“class Program”,聲明以后就可以直接調用了。
在解決方案資源管理器中可以看到控制臺應用程序的組成如下。
.AssemblyInfo.cs文件:存放程序集信息的文件。
.Program.cs文件:提供控制臺應用程序運行入口的類文件,可以編寫程序要執行的代碼。
.引用:表示項目中用到的命名空間或組件,該項目中引用的都是系統自動提供的,也可以手動添加引用。
【拓展訓練】
在控制臺輸出中文信息“你好,歡迎來到C# 4.5的世界!”。
既然能輸出“Hello C# 4.5”,那么想輸出“你好,歡迎來到C# 4.5的世界!”怎么辦呢?只需要將步驟⑶的關鍵語句中的引號里面的內容改為你想要輸出的內容即可(拓展代碼1-1.txt)。
System.Console.WriteLine("你好,歡迎來到C#4.5的世界!");
提示
引號和括號需要使用英文形式的,Console前面的System.可以省略,因為使用了using System,否則不能省略。
運行后的輸出如下圖所示。

2.1.2 創建第1個Windows窗體應用程序
【范例2-2】 使用Visual Studio 2013創建第1個Windows應用程序。
⑴ 啟動Visual Studio 2013,在Visual Studio 2013窗口中選擇【新建】【項目】,彈出【新建項目】窗口,在【模板】中選擇【Visual C#】,然后選擇【Windows窗體應用程序】,在【名稱】文本框中輸入項目名稱“HelloWindows”,然后單擊【確定】按鈕,打開一個帶窗體的Windows應用程序。


⑵ 在【工具箱】窗口中可以把所需的控件添加到窗體上來進行界面設計(雙擊工具箱中的控件或直接把控件從工具箱拖放到窗體上),如分別添加一個文本框Textbox控件和一個按鈕Button控件,如下圖所示。

⑶ 在右下部分屬性設置里面,設置按鈕Button1的Text屬性為“單擊我”。

⑷ 雙擊窗體上的Button1按鈕,自動打開代碼視圖窗口并生成button1_Click方法,然后添加代碼如下(代碼1-2.txt)。
textBox1.Text = "Hello,C# 4.5"; //設置textBox1的text屬性
完整的代碼如下。
01 using System; 02 using System.Collections.Generic; 03 using System.ComponentModel; 04 using System.Data; 05 using System.Drawing; 06 using System.Linq; 07 using System.Text; 08 using System.Windows.Forms; 09 10 namespace HelloWindows 11 { 12 public partial class Form1:Form 13 { 14 public Form1() 15 { 16 InitializeComponent(); 17 } 18 19 private void button1_Click(object sender,EventArgs e) 20 { 21 textBox1.Text="Hello,C#4.5";//設置textBox1的text屬性 22 } 23 } 24 }

【代碼詳解】
Windows窗體應用程序生成的窗體名默認為Form1.cs,Form1.cs中的1~8行是導入的命名空間,這是創建Windows窗體應用程序自動生成的。第10行中namespace的后面是本項目命名空間,默認和項目名稱一樣。第12行是Form1類的定義,第14~17行是自動生成的構造函數。第19~22行是單擊按鈕Button1時要執行的代碼。第21行是自己輸入的,用來在文本框中顯示“Hello C# 4.5”信息。
【運行結果】
單擊工具欄中的【啟動調試】按鈕,在出現的窗體中單擊按鈕,運行結果如下圖所示。

【范例分析】
在這個Windows窗體應用程序中,代碼比較簡單。我們在窗體上添加TextBox和Button控件并設置其相應屬性,編寫按鈕的單擊事件處理程序方法代碼“textBox1.Text = "Hello,C# 4.5";”;實現在文本框中輸出信息。Windows窗體應用程序結構和控制臺應用程序類似,除了有一個Form1.cs窗體文件外,也有一個Program.cs文件作為應用程序運行的主入口點。自動生成的代碼如下。
01 using System;
02 using System.Collections.Generic; 03 using System.Linq; 04 using System.Windows.Forms; 05 06 namespace HelloWindows 07 { 08 static class Program 09 { 10 ///<summary> 11 ///應用程序的主入口點 12 ///</summary> 13 [STAThread] 14 static void Main() 15 { 16 Application.EnableVisualStyles(); 17 Application.SetCompatibleTextRenderingDefault(false); 18 Application.Run(new Form1()); 19 } 20 } 21 }
【拓展訓練】 使用Visual Studio 2013創建第1個網站。
⑴ 啟動Visual Studio 2013,選擇【新建】【網站】,在彈出窗口中的【項目類型】中選擇【Visual C#】,在【模板】中選擇【ASP.NET Web窗體網站】,在【Web位置】后面輸入網站名稱“FirstWebSite”,【語言】選擇“C#”,然后單擊【確定】按鈕,打開一個帶Web窗體的網站項目。

⑵ 切換到自動生成的Default.aspx頁面的設計視圖,在Default.aspx頁面上雙擊自動出現代碼視圖窗體,并生成Page_Load方法框架。在Page_Load方法中輸入以下代碼。
Response.Write("Hello C# 4.5"); //
完整代碼如下。
01 using System; 02 using System.Configuration; 03 using System.Data; 04 using System.Linq; 05 using System.Web; 06 using System.Web.Security; 07 using System.Web.UI; 08 using System.Web.UI.HtmlControls; 09 using System.Web.UI.WebControls; 10 using System.Web.UI.WebControls.WebParts; 11 using System.Xml.Linq; 12 13 public partial class_Default:System.Web.UI.Page 14 { 15 protected void Page_Load(object sender,EventArgs e) 16 { 17 Response.Write("Hello C#4.5");//在頁面上顯示"Hello C#4.5" 18 } 19 }
Response.Write將信息輸出到Web頁面中,運行后的輸出如下圖所示。

2.2 使用幫助
本節視頻教學錄像:3分鐘
在學習的過程中難免會遇到困難,如果遇到困難時,能解決問題的老師和朋友不在身邊該怎么辦?通過MSDN和互聯網我們可以找到答案。
2.2.1 使用MSDN
MSDN是開發人員必備的開發文檔,安裝Visual Studio 2013之后單擊菜單欄中的【幫助】【添加和移除幫助內容】。在【添加和移除內容】中的搜索欄中輸入Visual C#,搜索和Visual相關的幫助文檔,然后在所搜索到的可用文檔中單擊【添加】,最后單擊右下角的【更新】,等更新完成,相關內容就添加到了我們本地的電腦中。

MSDN的使用很簡單,常用的使用方式有以下4種。
目錄:以大綱的方式顯示幫助信息,比如可以按照“Visual C#入門”主題學習C#。
索引:以關鍵字的方式顯示幫助信息。
收藏夾:可以收藏某個主題的幫助文檔。

除此之外,使用MSDN的搜索功能,可以按照關鍵字搜索幫助文檔。假如用目錄和索引方式沒有找到需要的知識,還可以利用搜索功能來查找。可以同時搜索本地MSDN和網上社區,從而找到更多關于搜索關鍵字的文章。為了使搜索更準確,在搜索界面還可以設置需要搜索的編程語言和技術主題,從而縮小搜索的范圍,以使搜索更精確。

2.2.2 學會利用網絡解決問題
網絡是個巨大的知識庫,也是很好的老師,一個初學者遇到的問題,別人也許早就遇到了,網絡中一般會有相應的解決方法。一定要學會利用Google、Baidu等搜索引擎去搜索,到專業的網站或論壇上也能找到自己所需的資料,如CSDN網站等。
2.3 C#開發的一般過程
本節視頻教學錄像:7分鐘
C#語言開發的一般過程和很多面向對象語言的開發過程一樣,主要有以下5個步驟。
1. 需求獲取分析
相關系統分析員和用戶初步了解需求,然后用Word列出要開發的系統的大功能模塊,每個大功能模塊有哪些小功能模塊,對于有些需求比較明確相關的界面,在這一步里面可以初步定義好少量的界面。
系統分析員深入了解和分析需求,根據自己的經驗和需求用Word或相關的工具再做出一份文檔系統的功能需求文檔。這次的文檔會清楚列出系統大致的大功能模塊,大功能模塊有哪些小功能模塊,并且還列出相關的界面功能。
2.設計
軟件設計可以分為概要設計和詳細設計兩個階段。實際上軟件設計的主要任務就是將軟件分解成模塊,即能實現某個功能的數據和程序說明、可執行程序的程序單元,可以是一個函數、過程、子程序、一段帶有程序說明的獨立的程序和數據,也可以是可組合、可分解和可更換的功能單元。然后進行模塊設計。概要設計就是結構設計,其主要目標就是給出軟件的模塊結構,用軟件結構圖表示。詳細設計的首要任務就是設計模塊的程序流程、算法和數據結構,次要任務就是設計數據庫,常用方法還是結構化程序設計方法。
3.編碼
在軟件編碼階段,開發者根據需求分析中對數據結構、算法分析和模塊實現等方面的設計要求,開始具體的編寫程序工作,分別實現各模塊的功能,從而實現對目標系統的功能、性能、接口、界面等方面的要求。
4.測試
軟件測試的目的是以較小的代價發現盡可能多的錯誤。實現這個目標的關鍵在于設計一套出色的測試用例(測試數據和預期的輸出結果組成了測試用例)。不同的測試方法有不同的測試用例設計方法。測試用例設計的關鍵是以較少的用例覆蓋盡可能多的內部程序邏輯結果。
5.軟件交付
在軟件測試證明軟件達到要求后,軟件開發者應向用戶提交開發的目標安裝程序、數據庫的數據字典、用戶安裝手冊、需求報告、設計報告、測試報告等。用戶安裝手冊應詳細介紹安裝軟件對運行環境的要求,安裝軟件的定義和內容,在客戶端、服務器端及中間件的具體安裝步驟,安裝后的系統配置。
2.4 程序編寫規范
本節視頻教學錄像:10分鐘
為了保證編寫出的程序都符合相同的規范,保證一致性、統一性而創建的程序編碼規范。編碼規范對于程序員而言尤為重要,主要原因有以下幾個。
⑴ 一個軟件的生命周期中,80%的花費在于維護。
⑵ 幾乎沒有任何一個軟件,在其整個生命周期中,均由最初的開發人員來維護。
⑶ 編碼規范可以改善軟件的可讀性,可以讓程序員盡快而徹底地理解新的代碼。每個軟件開發人員都必須遵守統一的編碼規范。
⑷ 代碼盡量簡單直白。
2.4.1 命名規范
1. 說明
表達清晰的命名規范是程序規劃的核心,如果規范的命名能清晰地表達出相應的功能,就可以讓人“望文知意”,提高開發效率和系統的可維護性。反之,如果命名不能表達其含義,例如,“aaa”、“bbb ()”,那么將事倍功半。
2. Pascal風格
包含一到多個單詞,每一個單詞第一個字母大寫,其余字母均小寫。例如,HelloWorld、SetName等。
3. Camel風格
包含一到多個單詞,第一個單詞首字母小寫,其余單詞首字母大寫。例如,name、productId等。
2.4.2 標識符的大小寫規則
⑴ 除了參數與變量外,所有命名空間名稱、類、函數、接口、屬性等名稱的命名,使用Pascal風格。
⑵ 參數與變量的命名使用Camel風格。
2.4.3 通用命名約定
約定的是如何選擇最適當的名稱,這些準則適用于所有標識符的命名。
1. 選擇名稱
⑴ 請選擇易讀的英文名稱。例如,英文Order的意思為規則、次序、訂購等,如果用在排序列中就不是很合適,用來表示訂單則更具可讀性。可讀性比詳細描述更重要,比如表示坐標名稱的ScreenX就比ScreenHorizontally更具可讀性。
⑵ 除下畫線外,不要使用連字符或任何其他非字母數字字符。在數據庫表字段名稱設計時,與其他表字段有關聯時,適當地使用表名+下橫線+字段名,可以更清晰地表現出該字段與關聯表對應字段的關系。比如產品分類表ProductClass中有字段Id與Name,那么產品表綁定的這兩個字段可命名為ProductClass_Id與ProductClass_Name,這樣在查看產品表時就可以清晰地知道這兩個字段與分類表的關系。
⑶ 避免使用與常用編程語言的關鍵字沖突的標識符。
⑷ 變量和方法參數使用Camel風格。例如,
01 string productName=""; 02 int number=0; 03 string sqlString=""; 04 double averageScore=0.0; 05 Users users=newUsers(); 06 Users model=newUsers(); 07 Users userModel=newUsers(); 08 const string const_String=""; 09 Private stringGetProductName(int id) 10 { 11 return""; 12 }
⑸ 不要使用成員屬性作為成員變量的前綴(其他變量命名也一樣)。例如,不要像Users m_users;這樣定義成員變量,可以使用第⑷點的設置。
2. 字母縮寫詞
⑴ 通常不要使用縮寫。
⑵ 除非這種縮寫已被廣泛接受,或者團隊當中大家都認可一種縮寫。例如,使用OnButtonClick,如果團隊中普遍認可OnBtnClick這種寫法也是可以的。
2.4.4 命名空間命名
命名空間的命名采用Pascal風格,取名的一般規則為Zhangsan. ProjectName(人名.項目名稱),例如,Zhangsan.Office;需要用復數時,請使用復數,例如,使用System.Collections而不是System. Collection;需要縮寫時,不需要加復數,例如,使用System.IO而不是System.IOs。
2.4.5 類、結構和接口命名
⑴ 按照Pascal大小寫格式,使用名詞或名詞短語為類、接口和值類型命名。
⑵ 接口命名以字母I為前綴,例如,Icomponent。
⑶ 派生類的末尾使用基類名稱。例如,從Stream繼承的Framework類型以Stream結尾,從Exception繼承的類型以Exception結尾。
2.4.6 邏輯層類命名
按照Pascal大小寫格式,使用名詞或名詞短語命名,并加上后綴Logic。
2.4.7 文件夾命名
文件夾以功能模塊名稱,按照Pascal大小寫格式命名。比如后端管理功能及權限相關功能,全部放到Systems文件夾里。
2.4.8 代碼編碼規范
⑴ 縮進和間隔。縮進用【Tab】鍵,不用【Spaces】鍵。
⑵ 注釋需和代碼對齊。多使用#regedit和#endregion代碼塊。
⑶ 在代碼中垂直對齊左括號和右括號。
01 if(x==0) 02 { 03 Response.Write(""); 04 }
不要出現以下情況。
01 if(x==0){ 02 Response.Write(""); 03 }
或者:
if(x == 0){ Response.Write(" "); }
⑷ 適當地增加空行,來增加代碼的可讀性。
在下列情況下應該有兩行空行。
① 同一文件的不同部分之間。
② 在類、接口及彼此之間。
在下列情況下應該有一行空行。
① 方法之間。
②局部變量和它后邊的語句之間。
③ 方法內的功能邏輯部分之間。
⑸ 避免使用大文件。如果一個文件里的代碼超過300~400行,必須考慮將代碼分開到不同類中。當然,模板生成類與邏輯層類除外。
⑹ 避免寫太長的方法。一個典型的方法代碼在1~25行之間。如果一個方法代碼超過25行,應該考慮將其分解為不同的方法。
⑺ 為了防止在閱讀代碼時不得不滾動源代碼編輯器,每行代碼或注釋在1024×768的顯示頻率下不得超過一顯示屏。
⑻ 在大多數運算符之前和之后使用空格,這樣做不會改變代碼的意圖,卻可以使代碼容易閱讀。
例如,
int j = i + k;
而不應寫為:
int j=i+k;
括號和它里面的字符之間不應該出現空格,括號應該和它前面的關鍵詞留有空格。例如,
01 while(true) 02 { 03 04 };
但是方法名和左括號之間不應該有空格,參數之間的逗號后應該加一個空格。例如,
method1(int i1, int i2)
for語句里的表達式之間加一個空格。例如,
for(expr1; expr2; expr3)
強制類型轉換時,在類型和變量之間加一個空格。例如,
(int) i ;
⑼ 所有可供用戶輸入的字段值,必須忽略前后空白(不包含密碼);在對字段值進行有效性驗證時,對提交進數據庫的內容必須進行SQL注入過濾與XSS過濾。
⑽ 一個方法只完成一個任務。不要把多個任務組合到一個方法中,即使那些任務非常小。
⑾ 避免使用很多成員變量,聲明局部變量,并傳遞給方法。
⑿ 不要在方法間共享成員變量,如果在幾個方法間共享一個成員變量,那就很難知道是哪個方法在什么時候修改了它的值。
⒀ 不在代碼中使用具體的路徑和驅動器名,使用相對路徑,并使路徑可編程。永遠別設想你的代碼是在“C:”盤運行。你不會知道,一些用戶在網絡或“Z:”盤運行程序。
⒁ 應用程序啟動時進行“自檢”并確保所需文件和附件在指定的位置。
如果需要的配置文件找不到,應用程序需自己創建使用默認值的一份。如果在配置文件中發現錯誤值,應用程序要拋出錯誤,給出提示消息告訴用戶正確值。
⒂ 出現任何問題給用戶一個友好的提示,錯誤消息需能幫助用戶解決問題。
永遠別用像“應用程序出錯”、“發現一個錯誤”等之類的錯誤消息,而應給出像“更新數據庫失敗,請確保登錄ID和密碼正確” 的具體消息。顯示錯誤消息時,除了說哪里錯了,還應提示用戶如何解決問題。不要用像“更新數據庫失敗”這樣的,要提示用戶怎么做,比如“更新數據庫失敗,請確保登錄ID和密碼正確”。
⒃ 錯誤處理和異常事件。
不要“捕捉了異常卻什么也不做”。如果隱藏了一個異常,你將永遠不知道異常到底發生了沒有。
發生異常時,給用戶提示友好的消息,但要精確記錄錯誤的所有可能細節,包括發生的時間和相關方法、類名等。
別寫太大的try-catch模塊。如果需要,為每個執行的任務編寫單獨的try-catch模塊。這將很容易找出哪一段代碼產生異常,并給用戶發出特定的錯誤消息。
如果應用程序需要,可以編寫自己的異常類。自定義異常不應從基類SystemException派生,而要繼承于. IApplicationException。
2.5 高手點撥
本節視頻教學錄像:2分鐘
什么是Windows窗體應用程序和控制臺應用程序,各自有什么特點?
控制臺程序是指類似DOS窗口那樣,以console命令行方式運行的程序,操作系統都支持控制臺程序,當然也包括Windows、Linux系統等。
控制臺應用程序一般沒有獨立的窗口,輸入和輸出都是以標準I/O進行的,不像一般的客戶端程序能使用鼠標操作。用戶可以不用跟客戶機進行交互,而且通常只運行在后臺。
窗體是指程序與用戶交互的可視界面,簡單地說Windows窗體應用程序就是我們通常用到的各種客戶端程序,可顯示信息、請求用戶輸入及通過網絡與遠程服務器進行通信。有很好的人機交互界面,都是基于普通的C/S架構的程序。
兩者的區別,簡單一點地說就是,如果要對控制臺應用程序進行操作,需要從命令行輸入命令和參數,像DOS系統那樣,Windows窗體應用程序就是擁有良好的人機交互界面,可顯示信息、請求用戶輸入信息,使用起來簡單方便。
2.6 實戰練習
操作題
用C#分別編寫一個控制臺應用程序、一個窗體應用程序和一個ASP.ent網站,實現輸出“我愛C#程序設計語言!”的效果。