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

⑵ 單擊【確定】按鈕,直接打開“Program.cs”的代碼窗口,并且會自動(dòng)產(chǎn)生如下的代碼。
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時(shí),首字母必須大寫。另外,程序中的Main函數(shù)必須為static類型。
⑷ 選擇【生成】【生成解決方案】菜單命令,開始編譯,如沒有編譯錯(cuò)誤,輸出窗口將顯示生成成功的字樣;如有錯(cuò)誤,錯(cuò)誤將在錯(cuò)誤窗口中列出。
【代碼詳解】
Program.cs中的第1~5行代碼是導(dǎo)入的命名空間,這是創(chuàng)建控制臺應(yīng)用程序時(shí)自動(dòng)生成的,不用管它,最好不要?jiǎng)印5?行中namespace的后面是本項(xiàng)目命名空間,默認(rèn)和項(xiàng)目名稱一樣。系統(tǒng)自動(dòng)生成一個(gè)包含Main方法的Program類,自己想運(yùn)行的代碼一般都寫在Main方法中。第12行代碼是用戶自己輸入的,能在控制臺輸出“Hello C# 4.5”。第13行代碼表示等待用戶輸入任意鍵。
【運(yùn)行結(jié)果】
選擇【調(diào)試】【啟動(dòng)調(diào)試】菜單命令或單擊
按鈕,即可在控制臺中輸出結(jié)果,如下圖所示。

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

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


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

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

⑷ 雙擊窗體上的Button1按鈕,自動(dòng)打開代碼視圖窗口并生成button1_Click方法,然后添加代碼如下(代碼1-2.txt)。
textBox1.Text = "Hello,C# 4.5"; //設(shè)置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";//設(shè)置textBox1的text屬性 22 } 23 } 24 }

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

【范例分析】
在這個(gè)Windows窗體應(yīng)用程序中,代碼比較簡單。我們在窗體上添加TextBox和Button控件并設(shè)置其相應(yīng)屬性,編寫按鈕的單擊事件處理程序方法代碼“textBox1.Text = "Hello,C# 4.5";”;實(shí)現(xiàn)在文本框中輸出信息。Windows窗體應(yīng)用程序結(jié)構(gòu)和控制臺應(yīng)用程序類似,除了有一個(gè)Form1.cs窗體文件外,也有一個(gè)Program.cs文件作為應(yīng)用程序運(yùn)行的主入口點(diǎn)。自動(dòng)生成的代碼如下。
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 ///應(yīng)用程序的主入口點(diǎn) 12 ///</summary> 13 [STAThread] 14 static void Main() 15 { 16 Application.EnableVisualStyles(); 17 Application.SetCompatibleTextRenderingDefault(false); 18 Application.Run(new Form1()); 19 } 20 } 21 }
【拓展訓(xùn)練】 使用Visual Studio 2013創(chuàng)建第1個(gè)網(wǎng)站。
⑴ 啟動(dòng)Visual Studio 2013,選擇【新建】【網(wǎng)站】,在彈出窗口中的【項(xiàng)目類型】中選擇【Visual C#】,在【模板】中選擇【ASP.NET Web窗體網(wǎng)站】,在【W(wǎng)eb位置】后面輸入網(wǎng)站名稱“FirstWebSite”,【語言】選擇“C#”,然后單擊【確定】按鈕,打開一個(gè)帶Web窗體的網(wǎng)站項(xiàng)目。

⑵ 切換到自動(dòng)生成的Default.aspx頁面的設(shè)計(jì)視圖,在Default.aspx頁面上雙擊自動(dòng)出現(xiàn)代碼視圖窗體,并生成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頁面中,運(yùn)行后的輸出如下圖所示。

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

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

除此之外,使用MSDN的搜索功能,可以按照關(guān)鍵字搜索幫助文檔。假如用目錄和索引方式?jīng)]有找到需要的知識,還可以利用搜索功能來查找。可以同時(shí)搜索本地MSDN和網(wǎng)上社區(qū),從而找到更多關(guān)于搜索關(guān)鍵字的文章。為了使搜索更準(zhǔn)確,在搜索界面還可以設(shè)置需要搜索的編程語言和技術(shù)主題,從而縮小搜索的范圍,以使搜索更精確。

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