書名: 新手學(xué)ASP.NET 3.5網(wǎng)絡(luò)開發(fā)作者名: 孔琳俊 陳松等編著本章字?jǐn)?shù): 231字更新時(shí)間: 2018-12-27 20:32:11
第1篇 從零開始
0 學(xué)習(xí)Web開發(fā)必備知識
本章專門針對性完全沒有Web開發(fā)基礎(chǔ)的讀者,從什么是網(wǎng)頁開始講起,一直到Web開發(fā)基礎(chǔ)環(huán)境的搭建和配置。本書所有Web開發(fā)都是使用C#語言完成的,本章就C#的基本概念和基礎(chǔ)語法,進(jìn)行了詳細(xì)的講解。在開發(fā)工具方面,本書采用了微軟最新推出的Visual Studio 2008開發(fā)套件,Internet信息配置是使用最新版本的IIS 7,瀏覽器使用的是IE 7.0。
本章從網(wǎng)頁搭建、編程規(guī)范等非常基礎(chǔ)的開發(fā)人員知識入手,介紹了C#的基本語法,C#開發(fā)的編碼結(jié)構(gòu),以及C#編程中遇到的一些基本知識點(diǎn),希望讀者能有一個(gè)很好的入門。
0.1 基礎(chǔ)概念
基礎(chǔ)概念是學(xué)習(xí)一門技術(shù)的入門,在學(xué)習(xí)Web開發(fā)前,首先要明白Web開發(fā)的一些基本概念,如什么是網(wǎng)頁,什么是Web開發(fā),用什么技術(shù)可以完成一個(gè)網(wǎng)頁,或者說,用什么技術(shù)能完成一個(gè)Web程序。本節(jié)將會(huì)對這些概念進(jìn)行詳細(xì)的解釋。
0.1.1 什么是網(wǎng)頁
網(wǎng)頁是讀者上網(wǎng)瀏覽時(shí)看到的頁面,通過瀏覽器,呈現(xiàn)在電腦上,用戶在瀏覽器的地址欄,輸入一個(gè)網(wǎng)站地址,如“www.baidu.com”,則打開一個(gè)頁面,如圖0.1所示,這個(gè)頁面就是我們常說的“網(wǎng)頁”。網(wǎng)站是一個(gè)具有多個(gè)網(wǎng)頁的站點(diǎn),如“www.baidu.com”就是一個(gè)網(wǎng)站的地址,用戶通過這個(gè)地址來訪問網(wǎng)站,網(wǎng)站包含多個(gè)相關(guān)的網(wǎng)頁。如圖0.1所示的是打開的百度網(wǎng)站的主頁。

圖0.1 百度網(wǎng)站的主頁
0.1.2 網(wǎng)頁開發(fā)技術(shù)
網(wǎng)頁分為動(dòng)態(tài)網(wǎng)頁和靜態(tài)網(wǎng)頁。如果要制作簡單的靜態(tài)網(wǎng)頁,只需要學(xué)習(xí)HTML語言就可以,這是一門非常簡單的語言,通過標(biāo)簽來完成基本網(wǎng)頁設(shè)置。下面的代碼是一個(gè)比較完整的HTML結(jié)構(gòu)。
<html> <head> <!-- 網(wǎng)頁的標(biāo)題等標(biāo)頭內(nèi)容 --> </head> <body> <-- 網(wǎng)頁的主要內(nèi)容 --> </body> </html>
其中標(biāo)簽都是成對出現(xiàn)的,如“<html></html>”,html是HTML語言開始的地方,代表這是一段HTML代碼。“<head></head>”是一個(gè)頁面的“頭”,一般包括這個(gè)頁面的主題和一些需要調(diào)用的頁面樣式等。“<body></body>”是頁面的“身體”,主要在此處寫頁面的內(nèi)容。下面通過一個(gè)完整的頁面實(shí)例,看看一個(gè)簡單的靜態(tài)頁面是什么樣子,此頁面的運(yùn)行效果如圖0.2所示,其中title表示當(dāng)前頁面的主題,顯示在瀏覽器的頂端。
<html> <head> <title>第一個(gè)靜態(tài)頁面</title> </head> <body> 這是頁面的主要內(nèi)容 </body> </html>

圖0.2 一個(gè)簡單的靜態(tài)網(wǎng)頁
靜態(tài)網(wǎng)頁可以算是第一代網(wǎng)頁,靜態(tài)網(wǎng)頁只顯示基本內(nèi)容,根本無法與用戶交互。要想與用戶交互,就需要?jiǎng)討B(tài)網(wǎng)頁,動(dòng)態(tài)網(wǎng)頁包括靜態(tài)部分和動(dòng)態(tài)部分,靜態(tài)部分依然由HTML語言組成,而動(dòng)態(tài)部分則由JavaScript和VBScript組成。因?yàn)閂BScript只能用在IE瀏覽器上,所以JavaScript更為通用,可以用在任意瀏覽器上。下面是添加了JavaScript代碼的動(dòng)態(tài)網(wǎng)頁,其中要在網(wǎng)頁中添加JavaScript代碼,必須添加“script”標(biāo)記,而且需要使用“l(fā)anguage”屬性指明腳本使用的語言。
1. <html> 2. <head> 3. <title>第一個(gè)靜態(tài)頁面</title> 4. <script language="javascript"><!—指明腳本的語言 --> 5. function jiaohu() <!—按鈕調(diào)用的方法--> 6. { 7. alert("您單擊了提交按鈕");<!- 單擊按鈕后彈出一個(gè)提示框--> 8. } 9. </script> 10. </head> 11. <body> 12. <input type="text"name="txt1"/> 13. <input type="button"name="btn1"value="提交"onclick="jiaohu()"/> 14. </body> 15. </html>
說明
具體的JavaScript語法可參考專業(yè)的JavaScript書籍。
上述代碼生成的頁面如圖0.3所示,用戶可以輸入內(nèi)容,單擊“提交”按鈕,瀏覽器會(huì)根據(jù)JavaScript的設(shè)計(jì)給出交互,其效果如圖0.4所示。

圖0.3 一個(gè)動(dòng)態(tài)網(wǎng)頁

圖0.4 動(dòng)態(tài)網(wǎng)頁的交互
雖然JavaScript可以完成一些交互,但其不能訪問數(shù)據(jù)庫,不能完成大容量數(shù)據(jù)的提交和獲取工作,所以一般都把JavaScript和VBScript稱為腳本語言。除了腳本語言可以完成動(dòng)態(tài)網(wǎng)頁外,還有很多種服務(wù)器端開發(fā)語言,如ASP、JSP、ASP.NET等。這些服務(wù)器端語言,可以實(shí)現(xiàn)與數(shù)據(jù)庫的交互,可以反饋數(shù)據(jù)給瀏覽器,可以實(shí)現(xiàn)用戶與服務(wù)器的完整交互。本書要介紹的就是ASP.NET,確切地說,其不是一門語言,而是一門網(wǎng)頁開發(fā)技術(shù),其底層語言是C#語言,C#語言在后面會(huì)詳細(xì)介紹。
0.1.3 Web開發(fā)相關(guān)技術(shù)
前面介紹了網(wǎng)頁的分類,但網(wǎng)頁和Web開發(fā)是什么關(guān)系呢?
網(wǎng)頁屬于Web開發(fā)的對象,或者說是Web開發(fā)的一部分,凡是使用瀏覽器來查看的程序,我們統(tǒng)稱為Web應(yīng)用程序,凡是用于開發(fā)Web應(yīng)用程序的技術(shù),本書統(tǒng)稱為Web開發(fā)技術(shù)。
Web應(yīng)用程序一般會(huì)分為兩部分:前臺開發(fā)和后臺開發(fā)。
○ 前臺開發(fā):主要包括頁面設(shè)計(jì)、樣式布局、特效等。頁面設(shè)計(jì)由基本的HTML和JavaScript完成,而樣式布局和特效一般由CSS(樣式表)完成。
○ 后臺開發(fā):可以與數(shù)據(jù)庫交互的各種開發(fā)語言,如ASP.NET、Java、PHP等。一般由一些類庫和包組成。如果使用ASP.NET,微軟提供了一個(gè).NET 3.5框架,其包含了Web開發(fā)所有需要的類庫,開發(fā)人員可以輕松調(diào)用,完成非常復(fù)雜的功能。
0.2 搭建開發(fā)環(huán)境
在學(xué)習(xí)一門開發(fā)語言前,需要先把這門開發(fā)語言的開發(fā)環(huán)境搭建好。本書所使用的ASP.NET 3.5,需要安裝Visual Studio 2008開發(fā)工具,此工具會(huì)自動(dòng)安裝類庫需要的.NET 3.5框架。本節(jié)就介紹這個(gè)開發(fā)工具的安裝過程。
0.2.1 安裝Visual Studio 2008
Visual Studio.NET是微軟公司推出的集成化互聯(lián)網(wǎng)開發(fā)平臺,利用它可以設(shè)計(jì)、開發(fā)以及調(diào)試部署Web應(yīng)用程序。下面簡要介紹Visual Studio 2008的安裝。
1 插入Visual Studio 2008(以下簡稱VS2008)的安裝光盤,彈出Visual Studio的安裝起始界面,如圖0.5所示。

圖0.5 安裝起始界面
提示
如果已經(jīng)安裝有VS 2008,則可以選擇安裝第二項(xiàng),MSDN的幫助文檔。如果不安裝此文檔,也可以到MSDN的網(wǎng)站,在線查看相關(guān)文檔。
2 單擊第一項(xiàng)“安裝Visual Studio 2008”,系統(tǒng)彈出“Visual Studio 2008安裝程序”對話框,如圖0.6所示。

圖0.6 “Visual Studio 2008安裝程序”對話框
3 單擊“下一步”按鈕,系統(tǒng)彈出許可協(xié)議界面。
4 選擇接受許可,然后在產(chǎn)品密鑰中輸入產(chǎn)品ID 號,輸入名稱。單擊“下一步”按鈕,彈出“選項(xiàng)頁”對話框,選擇所安裝的功能和產(chǎn)品安裝路徑。
5 單擊“安裝”按鈕,系統(tǒng)開始安裝Visual Studio 2008,如圖0.7所示。

圖0.7 VS2008的安裝界面
6 安裝完成后,單擊“完成”按鈕,結(jié)束安裝過程。
0.2.2 Visual Studio 2008 IDE簡介
單擊“開始|所有程序|Microsoft Visual Studio 2008”中的“Microsoft Visual Studio 2008”可執(zhí)行文件,打開VS2008的開始界面,如圖0.8所示。圖中標(biāo)注出了需要注意的各個(gè)區(qū)域。其中開始學(xué)習(xí)文檔,提供一些入門者案例和文檔,讀者除了看書之外,也可以經(jīng)常閱讀這些文檔,有助于了解一些更深入的知識點(diǎn)。VS開發(fā)新聞區(qū)域,如果連接了網(wǎng)絡(luò),則會(huì)顯示一些最新的VS開發(fā)文檔和注意事項(xiàng)。

圖0.8 VS2008的開始界面
單擊“文件|新建|項(xiàng)目”菜單,打開VS 2008提供的模板窗口,如圖0.9所示。一定要注意“選擇框架版本”列表框,這里默認(rèn)是.NET 3.5框架,但其支持.NET 3.0和.NET 2.0框架版本。如果要開發(fā)舊版本的程序,可通過此列表選擇。

圖0.9 新建項(xiàng)目模板
0.2.3 實(shí)現(xiàn)第一個(gè)ASP.NET程序
單擊“開始”|“所有程序”|“Microsoft Visual Studio 2008”中的“Microsoft Visual Studio 2008”命令,啟動(dòng)Visual Studio 2008,如圖0.10所示。

圖0.10 Visual Studio.NET起始頁面
Visual Studio 2008提供了兩種新建項(xiàng)目的方式:一種是在Visual Studio.NET的起始頁的“最近的項(xiàng)目”選項(xiàng)卡中單擊“新建”|“項(xiàng)目”命令,出現(xiàn)如圖0.11所示的“新建網(wǎng)站”對話框;另一種是單擊Visual Studio.NET的“文件”|“新建”|“網(wǎng)站”命令。

圖0.11 “新建網(wǎng)站”對話框
Visual Studio.NET已經(jīng)預(yù)定義了不同類型的網(wǎng)站模板,用戶可以根據(jù)不同的開發(fā)任務(wù)選擇其一。本書主要講的是Visual C#開發(fā)ASP.NET網(wǎng)站。因此在“新建網(wǎng)站”對話框中,將“語言”選項(xiàng)設(shè)定為Visual C#,將“模板”選項(xiàng)設(shè)定為ASP.NET Web Site,在“位置”文本框中填入項(xiàng)目要保存的位置。單擊“確定”按鈕,新建了一個(gè)Visual C#項(xiàng)目中的ASP.NET網(wǎng)站應(yīng)用程序,如圖0.12所示。

圖0.12 新建一個(gè)Visual C# ASP.NET項(xiàng)目
此時(shí)應(yīng)用程序會(huì)生成兩個(gè)文件:一個(gè)擴(kuò)展名為“aspx”的文件和一個(gè)名字相同但擴(kuò)展名為“cs”的文件。其中“aspx”文件是必需的,是ASP.NET程序的界面;“cs”是C#源代碼文件的擴(kuò)展名,C#源代碼文件實(shí)現(xiàn)ASP.NET程序的功能。
在新的應(yīng)用程序建立后,會(huì)生成一個(gè)空白窗體,也就是擴(kuò)展名為“aspx”的文件。將其保存為“Default.aspx”。“Default.aspx”文件的代碼如下:
1. <%@Page Language="C#"AutoEventWireup="true" CodeFile="Default.aspx.cs"Inherits="_Default"%> 2. <!DOCTYPE html PUBLIC"-//W3C//DTD XHTML 1.0 Transitional//EN" 3. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 4. <html xmlns="http://www.w3.org/1999/xhtml"> 5. <head runat="server"> 6. <title>無標(biāo)題頁</title> 7. </head> 8. <body> 9. <form id="form1"runat="server"> 10. <div> 11. 12. </div> 13. </form> 14. </body> 15. </html>
在<div>和</div>中間加入代碼<asp:Label ID="tt" Runat="server" Font-Size = "30" Font-Italic="True"ForeColor="#485866">Study ASP.NET</asp:Label>,保存。然后運(yùn)行這個(gè)例子,效果如圖0.13所示。

圖0.13 第一個(gè)ASP.NET程序
0.3 IIS 7 Web服務(wù)配置
IIS是Internet Information Server的簡稱。IIS作為當(dāng)今流行的Web服務(wù)器之一,提供了強(qiáng)大的Internet和Intranet服務(wù)功能。在Windows的各個(gè)版本中,Windows的服務(wù)器版本通常默認(rèn)安裝IIS,而其他版本需要用戶自行安裝。例如,Windows XP Professional和Vista默認(rèn)是不安裝IIS,需要用戶手動(dòng)安裝。
本節(jié)主要介紹IIS 7的安裝和配置,主要操作系統(tǒng)是Windows Vista。
0.3.1 安裝IIS 7
IIS 7不需要下載,一般都在Windows操作系統(tǒng)的安裝盤內(nèi),具體安裝步驟如下。
1 單擊“開始”|“控制面板”|“程序和功能”命令,打開“卸載和更改程序”窗口。
2 單擊左側(cè)的“打開和關(guān)閉Windows功能”,彈出“Windows功能”對話框,如圖0.14所示。

圖0.14 “Windows功能”對話框
3 圖0.14中可以找到Internet信息服務(wù)的選項(xiàng),展開其所有節(jié)點(diǎn),如圖0.15所示。

圖0.15 Internet信息服務(wù)的選項(xiàng)
4 一定要選中“Web管理工具”和“萬維網(wǎng)服務(wù)”的所有內(nèi)容,單擊“確定”按鈕,最后完成IIS安裝。
安裝完畢之后,要測試IIS 7.0安裝是否正確。IIS 7.0正確安裝之后,系統(tǒng)會(huì)自動(dòng)建立一個(gè)默認(rèn)Web站點(diǎn)。用戶只需檢驗(yàn)是否能夠正確訪問該網(wǎng)站,就可以判斷IIS 7.0是否正確安裝。具體操作步驟如下所列。
1 單擊“開始”|“控制面板”命令,打開“控制面板”窗口。
2 雙擊“管理工具”圖標(biāo),進(jìn)入“管理工具”窗口。雙擊“Internet信息服務(wù)管理器”圖標(biāo),打開“Internet信息服務(wù)管理器”窗口,如圖0.16所示。

圖0.16 “Internet信息服務(wù)管理器”窗口
3 在左側(cè)的Default Web Site節(jié)點(diǎn)單擊鼠標(biāo)右鍵,在彈出的快捷菜單上選擇“瀏覽”命令。系統(tǒng)會(huì)打開一個(gè)IE窗口顯示該網(wǎng)頁,如圖0.17所示。

圖0.17 IIS測試網(wǎng)頁
用戶也可以直接打開IE瀏覽器,在地址欄中輸入本機(jī)的網(wǎng)址,可以是localhost/(localhost代表本機(jī)的默認(rèn)網(wǎng)址)或者127.0.0.1/(IP地址127.0.0.1代表本機(jī)),查看是否能打開.asp或.aspx類型的文件。如果能正常打開,就證明IIS已經(jīng)正確安裝和運(yùn)行了。
0.3.2 配置 IIS 7支持的.NET版本
默認(rèn)的IIS服務(wù)器配置并不一定適合用戶,通常需要進(jìn)行一定的修改。例如,訪問IP、主目錄等。操作步驟如下所示。
1 打開“Internet信息服務(wù)管理器”窗口。
2 在“Default Web Site”節(jié)點(diǎn)上單擊鼠標(biāo)右鍵,在彈出的快捷菜單上選擇“編輯綁定”命令,彈出“網(wǎng)站綁定”窗口,如圖0.18所示。

圖0.18 “網(wǎng)站綁定”對話框
3 選中默認(rèn)的一條綁定記錄,單擊“編輯”按鈕,選擇IIS服務(wù)所使用的IP地址。如果選擇了IP地址,客戶端瀏覽器就可以通過IP地址來訪問此網(wǎng)站,如圖0.19所示。

圖0.19 “編輯網(wǎng)站綁定”窗口
4 關(guān)閉這些窗口,右擊“Default Web Site”節(jié)點(diǎn),選擇“高級屬性”菜單,打開“高級設(shè)置”窗口,如圖0.20所示。

圖0.20 “高級設(shè)置”窗口
5 單擊物理路徑后面的“”按鈕,可以更改網(wǎng)頁文件的存放位置和起始位置。當(dāng)安裝完IIS 7.0時(shí),默認(rèn)的主目錄是“C:\Inetpub\wwwroot\”。
說明
如果操作系統(tǒng)安裝在D盤,則默認(rèn)的主目錄是“D:\Inetpub\wwwroot\”。
6 關(guān)閉所有窗口,單擊“Default Web Site”,在其右側(cè)的功能視圖中可以看到有一項(xiàng)“默認(rèn)文檔”,雙擊此項(xiàng)后,打開的界面如圖0.21所示。這里可以看到站點(diǎn)默認(rèn)的首頁名稱為iisstart.htm、Default.htm 等。當(dāng)用戶直接訪問網(wǎng)站時(shí),服務(wù)器按照列表順序依次尋找文檔。用戶也可以直接在文本框內(nèi)添加新的文檔。

圖0.21 默認(rèn)文檔
0.3.3 瀏覽第一個(gè)ASP.NET程序
在設(shè)計(jì)好ASP.NET應(yīng)用程序后,可以通過按“Ctrl+F5”鍵來運(yùn)行程序。但所有的程序都是通過IIS來配置的,如果要使用本書的實(shí)例,需要先在IIS 7中配置好實(shí)例,才可以正常進(jìn)行Web程序的瀏覽,本節(jié)以前面介紹的第一個(gè)實(shí)例為例,學(xué)習(xí)如何瀏覽Web程序。
1 打開IIS 7,右擊“Default Web Site”節(jié)點(diǎn),選擇“添加應(yīng)用程序”菜單,打開“添加應(yīng)用程序”對話框,如圖0.22所示。

圖0.22 “添加應(yīng)用程序”對話框
2 在“別名”文本框內(nèi),輸入程序的名稱,就是要瀏覽的程序的別名,本例為第一個(gè)程序命名為“FirstWeb”,單擊“物理路徑”文本框后面的“”按鈕。打開“瀏覽文件夾”對話框,選擇源代碼所在的路徑,如果是光盤文件,就選中光盤下的源代碼文件夾。
3 添加完應(yīng)用程序的別名和路徑后,單擊“確定”按鈕。在“Default Web Site”節(jié)點(diǎn)下,就會(huì)生成一個(gè)名為“FirstWeb”的節(jié)點(diǎn)。右擊此節(jié)點(diǎn),選擇“瀏覽”菜單,則會(huì)打開IE 瀏覽器,運(yùn)行效果與前面創(chuàng)建的第一個(gè)ASP.NET程序相同。
注意
如果是在VS 2008中新創(chuàng)建的Web程序,會(huì)自動(dòng)在IIS 7中生成一個(gè)應(yīng)用程序節(jié)點(diǎn)。
0.4 C# 3.0語言基礎(chǔ)
C#(讀作C Sharp)是一門新興的開發(fā)語言,本節(jié)主要介紹C#語言的由來,以及C#與以前的開發(fā)語言的區(qū)別,最后還介紹了C#在Web應(yīng)用中的地位。
提示
當(dāng)前的最新C#版本是.NET 3.5框架下的C# 3.0。
0.4.1 C#簡介
對C#的由來有兩種解釋:從字面的意義來解釋,是C語言的開發(fā)利器;從Microsoft給出的解釋,是C++的升級語言,具有比C++更優(yōu)越的開發(fā)特性。
C#是Web開發(fā)的一種重要語言,Microsoft將C#發(fā)展成為Java語言的重要對手。在Microsoft提供的.NET框架中,可以用C#開發(fā)C/S應(yīng)用,也可以開發(fā)Web應(yīng)用,并且可以在一個(gè)項(xiàng)目中混合使用C#和VB等語言,這從某種意義上講,.NET框架和Java的虛擬機(jī)有很大的相似。C#的語法規(guī)則和C++非常相似,有C語言基礎(chǔ)的開發(fā)者比較容易上手。
C#的優(yōu)點(diǎn)概括如下:
○ 支持快速開發(fā):快速開發(fā)曾經(jīng)是VB語言的一大特色,而C#整合了這種特色,借助于Visual Studio開發(fā)工具,可以通過拖放的形式添加組件,并自動(dòng)生成組件需要的代碼,同時(shí)在VS 2008中,自動(dòng)生成的代碼與手動(dòng)控制的代碼相隔離,讓開發(fā)人員更容易地檢查自己的設(shè)計(jì)。
○ 支持面向?qū)ο螅好嫦驅(qū)ο螅∣bject-Oriented)是開發(fā)程序的一種機(jī)制,是專指在程序設(shè)計(jì)中采用封裝、繼承、抽象等設(shè)計(jì)方法,其重點(diǎn)是類的設(shè)計(jì)。而C#中連一個(gè)字符串都是面向?qū)ο笮偷脑O(shè)計(jì)。
○ 對XML強(qiáng)大的支持:XML語言已經(jīng)成為一種標(biāo)準(zhǔn)的數(shù)據(jù)描述語言,支持XML開發(fā)也成了衡量一種語言是否強(qiáng)大的標(biāo)準(zhǔn)。C#對XML語言的支持,體現(xiàn)在強(qiáng)有力的XML框架類中,尤其是命名空間“System.Xml”中,提供了一系列對XML讀取的操作類,使XML程序的開發(fā)變得非常容易。
○ 面向組件的開發(fā):面向組件是繼面向?qū)ο蠛蟮挠忠涣餍汹厔荩瑢儆谠O(shè)計(jì)方法的一種。在C#中最具特色的組件就是ADO.NET數(shù)據(jù)訪問組件。組件設(shè)計(jì)也是C#考慮最多的一種形式,組件可以在開發(fā)中直接使用,也可以調(diào)用對象提供的方法來操作。
0.4.2 變量和常量
常量一般是程序中不變的數(shù)據(jù),如2,“中國”等,常量也有不同的類型,如2屬于數(shù)值型,而“中國”屬于字符型。在C#中定義常量的語法如下所示。
public const string CHINA = "中國";
上述代碼中,“const”是定義常量的標(biāo)識,如果沒有此標(biāo)識,即使為“CHINA”指定固定的值,也不算是常量。“string”用來定義常量的類型,注意常量在命名時(shí),通常使用大寫字母。
變量就是經(jīng)常發(fā)生變化的數(shù)據(jù),如計(jì)算登錄人數(shù)的變量“count”,可能隨著登錄用戶的不斷增加而變化。在C#中定義變量的語法如下所示。
public int count = 10;
其中“int”表示變量的類型,“count”表示變量名,變量名可以隨意定義,但最好可以突出此變量的意義所在。注意變量名一般為英文。
變量可以不需要初始值,如下所示的定義也是正確的。
public int count;
C#中變量的類型可以概括為3種:文本類型、數(shù)值類型和其他類型。
(1)文本類型主要包括string和char,其中string用來存放字符串,char用來存放單個(gè)字符,兩者的定義語法如下所示,其中string變量的值用雙引號包括,而char變量的值用單引號包括。
string name = "歡迎到北京來"; char word = 'W';
(2)數(shù)值類型包含的內(nèi)容比較多,如整數(shù)、浮點(diǎn)數(shù)、長整數(shù)等,表0.1列出了C#中常見的數(shù)值類型,并演示了使用這些類型的語法。
表0.1 C#中常見的數(shù)值類型

(3)其他類型主要包括日期型、Object類型和布爾型。其中Object是C#的通用類型,C#中所有的類型都是從Object發(fā)展而來的。下面演示這3種類型的使用語法。
DateTime date ; //日期型 object data; //object類型 bool ifExit = true; //布爾型
0.4.3 運(yùn)算符
運(yùn)算符是C#進(jìn)行數(shù)據(jù)處理的基礎(chǔ),C#中的運(yùn)算符主要分為5類:算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、賦值運(yùn)算符和“?”運(yùn)算符。
1.算術(shù)運(yùn)算符
算術(shù)運(yùn)算符是常用的計(jì)算符號,如“+”、“-”、“*”、“/”等。算術(shù)運(yùn)算符又分為一目運(yùn)算符和二目運(yùn)算符,其中一目指只有一個(gè)變量參與的運(yùn)算,二目是指兩個(gè)變量參與的運(yùn)算。其中“+”、“-”、“*”、“/”這些運(yùn)算符,必須有兩個(gè)變量參與才可以實(shí)現(xiàn)運(yùn)算,而“++”、“--”這種自增、自減的操作,只有一個(gè)變量參與。下面的代碼演示了這些常用的算術(shù)運(yùn)算符。
int a = 10; int b = 11; int add=a+b; //"+" int incre = b - a;//"-" int sum=a*b; //"*" a++; //自增 b--; //自減
2.邏輯運(yùn)算符
邏輯運(yùn)算符一般與關(guān)系運(yùn)算符結(jié)合使用。關(guān)系運(yùn)算符用來比較兩個(gè)數(shù)據(jù),如“= =”、“>=”等,而邏輯運(yùn)算符用來判斷兩個(gè)或多個(gè)使用關(guān)系運(yùn)算的語句。邏輯運(yùn)算符包含的運(yùn)算如表0.2所示。關(guān)系運(yùn)算符包含的運(yùn)算如表0.3所示。
表0.2 邏輯運(yùn)算符包含的運(yùn)算

表0.3 關(guān)系運(yùn)算符包含的運(yùn)算

下面的代碼演示了邏輯運(yùn)算符和關(guān)系運(yùn)算符的使用。
int a = 10; int b = 11; if(a>b) //關(guān)系運(yùn)算符 label2.Text = (a + b).ToString(); if ((a <= b) || (a <= 11)) //邏輯運(yùn)算符和關(guān)系運(yùn)算 label2.Text = a.ToString(); if (a > 0 && b > 0)//邏輯運(yùn)算符和關(guān)系運(yùn)算 label2.Text = b.ToString();
3.賦值運(yùn)算符
賦值運(yùn)算符是C#最基本的運(yùn)算,就是為某個(gè)變量指定值。“int a=10;”是一個(gè)最簡單的賦值運(yùn)算,“等號”左邊一般為變量的名稱,右邊為變量的值,有時(shí)候右邊也可能是另一個(gè)變量。下面演示常用的賦值運(yùn)算。
int a = 0; int b; if(a!=0) //關(guān)系運(yùn)算 b=a; //賦值運(yùn)算 else b=a++; //賦值運(yùn)算
4.?運(yùn)算符
?運(yùn)算符通常被稱為三目運(yùn)算符,因?yàn)橛?個(gè)變量參與其中。下面代碼是一個(gè)很簡單的?運(yùn)算。
b = (a > 0) ? a : a++;
上述表達(dá)式中有兩個(gè)關(guān)鍵符號“?”和“:”,其中?前邊通常是一個(gè)關(guān)系運(yùn)算,?后面緊跟兩個(gè)變量。?運(yùn)算符的意思是判斷?前面的表達(dá)式,如果表達(dá)式結(jié)果為true,則選擇?后面的第一個(gè)值,如果表達(dá)式結(jié)果為false,則選擇?后面的第二個(gè)值,兩個(gè)值之間以“:”間隔。
下面代碼中,b的值為“1”。
int a = 1; int b; b=(a>0)?a:a++; //?運(yùn)算
0.4.4 流程控制
一個(gè)應(yīng)用程序,通常包含了復(fù)雜的應(yīng)用邏輯,要實(shí)現(xiàn)這些邏輯,就必須進(jìn)行流程控制,本節(jié)介紹C#常用的5種流程控制語句:if、switch、for、foreach、while。
1.if語句
if語句用來判斷條件,符合條件則進(jìn)入if語句的代碼塊,不符合則執(zhí)行if代碼塊后面的內(nèi)容。if語句的語法如下所示。
if(a >0){}
如果有多個(gè)判斷條件,可以使用if…else if的組合語句,使用語法如下所示。
if(a>0){ } else if(a=0){ } else if(a<0){ }
如果有且只有兩個(gè)判斷條件,可以使用if…else…的組合語句,使用語法如下所示。
if (a > 0) { }
else { }
以下代碼演示了一個(gè)實(shí)例,判斷a是否大于10,如果大于10,則a自減,否則a自增。
int a=15; if (a > 10) //是否大于10 { a--; } else { a++; }
2.switch語句
switch語句也是條件判斷語句,其主要用于兩個(gè)以上條件的判斷。switch語句的語法如下所示。
1. switch() 2. { 3. case"": 4. break; 5. case"": 6. break; 7. default: 8. break; 9. }
上述代碼中,switch后面括號中的內(nèi)容表示要判斷的值。語句中的case關(guān)鍵字,表示一種判斷。關(guān)鍵字break表示此次判斷結(jié)束并返回。default關(guān)鍵字是指如果括號中的內(nèi)容與以上的所有case都不相符時(shí)默認(rèn)的執(zhí)行語句。
在下面演示代碼中,welcome的值最終為“奧運(yùn)北京”。
1. string city="北京"; 2. string welcome; 3. switch(city) 4. { 5. case"北京": 6. welcome="奧運(yùn)北京"; 7. break; 8. case"上海": 9. welcome="上海世博"; 10. break; 11. default: 12. welcome="歡迎您來到中國"; 13 14. }
3.for語句
for語句表示一個(gè)循環(huán),其語法如下所示。其中布爾表達(dá)式是允許執(zhí)行循環(huán)的條件。注意括號中的三個(gè)數(shù)據(jù)以“;”間隔。
for(初始值;布爾表達(dá)式;更新值)
下面的代碼是一個(gè)例子,演示如何輸出1~10的數(shù)字。其中初始值為1,條件是i<11,每次循環(huán)后i自增。
String str=""; for (int i = 1; i < 11; i++) { str=str+i.ToString(); } label2.Text=str;
4.foreach語句
foreach也是一個(gè)循環(huán),通常用其實(shí)現(xiàn)對集合的遍歷,因?yàn)榇搜h(huán)的條件不是布爾表達(dá)式,而是獲取集合中的所有對象。foreach的使用語法如下所示。
foreach(集合個(gè)例 變量名 in 集合)
下面的代碼演示了一個(gè)字符串?dāng)?shù)組的遍歷過程。
//定義一個(gè)字符串?dāng)?shù)組 string[] arrayStr = new string[] { "北京", "上海", "深圳" }; string strLong=""; foreach (string str in arrayStr)//遍歷數(shù)組中的每個(gè)字符串 { strLong = strLong + str; //連接字符串 } label2.Text= strLong;
5.while語句
while語句是一個(gè)標(biāo)準(zhǔn)循環(huán),其語法如下所示。判斷布爾表達(dá)式的值,如果值為true,則執(zhí)行循環(huán)語句的內(nèi)容,否則不執(zhí)行。
while(布爾表達(dá)式)
下面的代碼輸出1~10個(gè)數(shù)字,排列順序?yàn)榈剐颉C看螆?zhí)行一次循環(huán),a都自減,當(dāng)a=0時(shí)就不再執(zhí)行循環(huán)。
int a=10; string str=""; while (a > 0) { str=str+a.ToString(); a--; } label2.Text=str;
0.4.5 隱性局部變量
在JavaScript中,一般不用int、string等來定義變量,而是直接用var,這一直被認(rèn)為是類型不安全的表現(xiàn)。在C#3.0中,依然引入了“var”關(guān)鍵字,但C#的類型轉(zhuǎn)換機(jī)制提供了類型安全的保障。下面是幾個(gè)常見的隱性局部變量。
var i = 6; var str = " hello world"; var d = 20.12; var myary=new int[]{1,2,3,4,5};
上面的變量都使用了var關(guān)鍵字定義,其效果類似于下面的代碼。
int i =6; string str = " hello world"; double d = 20.12; int[]myary=new int[]{1,2,3,4,5};
var的用法比較簡單,但需要注意以下幾點(diǎn):
○ var必須包含初始化器。
○ 初始化器必須是一個(gè)表達(dá)式。
○ 初始化器的編譯器類型不能是Null類型。
○ 如果局部變量聲明了多個(gè)聲明符,這些變量必須具備相同的編譯器類型。
0.4.6 Lambda表達(dá)式
Lambda表達(dá)式和匿名方法有關(guān),是一種簡約化表述匿名方法的函數(shù)表達(dá)式。其表述語法如下所示,類似于C++的指針。
Param => Expr;
Lambda表達(dá)式的作用,就是提供一種更簡練的方法,來書寫匿名方法,最常用在泛型匿名方法的簡化上。下面是一個(gè)通過匿名方法匹配字符串的實(shí)例。
1. static void Main(string[]args) 2. { 3. string[]list=new string[]{"efgcd","ef","jsp","asp.net","php"}; 4. string[]listAfter=Array.FindAll(list, //利用委托進(jìn)行匹配 5. delegate(string s) 6. { 7. return s.IndexOf("ef")>=0; 8. } 9. ); 10. foreach(string str in listAfter) //輸出滿足條件的字符串 11. { 12. Console.WriteLine(str); 13. } 14. }
下面使用Lambda表達(dá)式修訂上面的方法。
static void Main(string[] args) { string[]list=new string[]{"efgcd","ef","jsp","asp.net","php" }; //使用Lambda表達(dá)式 string[]listAfter=Array.FindAll(list,s=>(s.IndexOf("ef")>=0)); //輸出滿足條件的字符串 foreach(string str in listAfter) { Console.WriteLine(str); } }
可以看到“s => (s.IndexOf("ef") >= 0)”表達(dá)式的寫法更簡單,缺點(diǎn)就是剛開始讀起來有些費(fèi)勁。
0.4.7 LINQ集成查詢概述
在查詢數(shù)據(jù)庫時(shí),通常使用SQL語言來實(shí)現(xiàn)數(shù)據(jù)的存儲和讀取,而在C# 3.0中,提出了新的集成查詢語言LINQ。LINQ之所以成為集成查詢語言,是因?yàn)槠洳粌H可以查詢數(shù)據(jù)庫,還可以查詢對象。本節(jié)介紹基本的LINQ查詢語法,具體的LINQ to SQL方法,會(huì)在第11章介紹。
本節(jié)介紹的LINQ語法主要針對SQL語法而言,把常用的SQL語法轉(zhuǎn)化為LINQ。
1.where語句
where語句用來查詢數(shù)據(jù)中符合條件的記錄。在LINQ中,where語句的語法如下所示。
from c in customs where c.city == "beijing" select c
其中表名是“customs”,而表的別名是c,查詢條件是“city="beijing"”。
2.select語句
Select語句用來選擇需要顯示的字段,如果要顯示全部字段,則語法如下所示。
from c in customs where c.city == "beijing" select c
如果要顯示某一個(gè)字段,則語法如下所示。
from c in customs where c.city == "北京" select c.name
3.group語句
group語句是以分組的形式顯示查詢的結(jié)果,其語法如下所示。
from c in customs group c.name by c.city
group和by關(guān)鍵字結(jié)合使用,上述代碼表示,按城市(city)分組顯示姓名(name)。
4.order by語句
order by語句用來按順序顯示數(shù)據(jù),主要是數(shù)據(jù)的升序和降序排列。order by的語法如下所示。
from c in customs order by c.name select new{c.name,c.phone}
其中默認(rèn)的是升序,需要降序,使用關(guān)鍵字“desc”,如果是要第二個(gè)排序字段降序,則使用下面的語法形式。
from c in customs order by c.name,c.phone desc select new{c.name,c.city}
5.into語句
into語句會(huì)產(chǎn)生一個(gè)新的表,表示將此表的查詢結(jié)果生成到另外一個(gè)表中,其使用語法如下所示。
from c in customs group c by c.city into n select new{country=n.key,custcount=n.group.count()}
0.5 編碼規(guī)范
在編寫程序時(shí),好的編碼規(guī)范非常重要,一方面可以便于后期的程序維護(hù)和管理,另一方面,具有良好規(guī)范的編碼可以大大降低開發(fā)時(shí)程序員犯錯(cuò)誤的幾率。
0.5.1 好的編碼結(jié)構(gòu)
對比下面兩段代碼,它們的功能相同,都定義了一個(gè)矩形類,并包含求面積的方法。
1.第一段代碼
1. public class Rectangle 2. { 3. public double dblWidth; 4. public double dblHeitht; 5. 6. public Rectangle(double_dblWidth,double_dblHeight) 7. { 8. this.dblWidth=_dblWidth; 9. this.dblHeitht=_dblHeight; 10. } 11. 12. public double GetArea() 13. { 14. return this.dblHeitht*this.dblWidth; 15. } 16. }
2.第二段代碼
1. public class Rectangle{ 2. public double dblWidth; 3. public double dblHeitht; 4. public Rectangle(double_dblWidth,double_dblHeight){ 5. this.dblWidth=_dblWidth; 6. this.dblHeitht=_dblHeight; 7. } 8. public double GetArea(){ 9. return this.dblHeitht*this.dblWidth; 10. } 11. }
相信在不作任何解釋的情況下,讀者還是能夠看明白代碼A的內(nèi)容,因?yàn)樗s進(jìn)結(jié)構(gòu)良好,體現(xiàn)了清晰的邏輯結(jié)構(gòu)。而代碼B呢?恐怕就困難多了。
可以看出,良好的代碼層次結(jié)構(gòu)及清晰的代碼邏輯結(jié)構(gòu),可以大大提高代碼的質(zhì)量。一方面可以降低程序員出錯(cuò)的可能性,另一方面,在代碼出現(xiàn)錯(cuò)誤的時(shí)候也很容易查找。
0.5.2 好的注釋風(fēng)格
注釋可以大大提高代碼的可閱讀性,另外在編寫程序時(shí),還可以幫助程序員具有更清晰的思路。同樣,仔細(xì)研究下面的兩個(gè)代碼段。
1. ///<summary> 2. /// 接口:形狀 3. ///</summary> 4. public interface IShape 5. { 6. ///<summary> 7. /// 方法:求面積 8. ///</summary> 9. ///<returns></returns> 10. double GetArea(); 11. } 12. 13. ///<summary> 14. /// 矩形類 15. ///</summary> 16. public class Rectangle:IShape 17. { 18. public double dblWidth; //寬 19. public double dblHeitht; //高 20. 21. ///<summary> 22. /// 構(gòu)造函數(shù) 23. ///</summary> 24. ///<param name="_dblWidth">寬</param> 25. ///<param name="_dblHeight">高</param> 26. public Rectangle(double_dblWidth,double_dblHeight) 27. { 28. this.dblWidth=_dblWidth; 29. this.dblHeitht=_dblHeight; 30. } 31. 32. ///<summary> 33. /// 求矩形面積 34. ///</summary> 35. ///<returns>面積</returns> 36. public double GetArea() 37. { 38. return this.dblHeitht*this.dblWidth; 39. } 40. }
很明顯,有了注釋之后,完全沒有必要對這段代碼進(jìn)行解釋了,讀者一定能夠看懂。另外,VS.NET提供了良好的自動(dòng)注釋功能,在方法或者類前面用“///”添加注釋時(shí),會(huì)自動(dòng)生成大量的注釋格式,只需要在相應(yīng)的位置添入注釋項(xiàng)即可。
在此推薦盡量使用“///”對類或方法進(jìn)行注釋,這樣做還有另外一個(gè)好處,當(dāng)引用這個(gè)類或者方法時(shí),VS.NET會(huì)自動(dòng)提示注釋的內(nèi)容。如圖0.23所示的是在引用Rectangle類的構(gòu)造函數(shù)時(shí)的情況。

圖0.23 根據(jù)方法注釋給出提示
這樣,在調(diào)用方法時(shí)便可以更加方便。
0.5.3 好的命名規(guī)范
在C#編碼中,常常使用到的命名規(guī)范有:
○ Pascal大小寫規(guī)范:所有單詞第一個(gè)字母大寫,其他字母小寫。
○ Camel大小寫形式:除了第一個(gè)單詞,所有單詞第一個(gè)字母大寫,其他字母小寫。
在C#中,推薦的命名規(guī)范如下:
(1)類名使用Pascal大小寫形式,如:
1. public class HelloWorld 2. { 3. … 4. }
(2)方法使用Pascal大小寫形式,如:
1. public class HelloWorld 2. { 3. void SayHello(string name) 4. { 5. … 6. } 7. }
(3)變量和方法參數(shù)使用Camel大小寫形式,如:
1. public class HelloWorld 2. { 3. int totalCount=0; 4. void SayHello(string name) 5. { 6. string fullMessage="Hello"+name; 7. … 8. } 9. }
也可以加前綴以表示變量的類型,但實(shí)際上C#并不推薦這種方式。
0.5.4 避免文件過大
在開發(fā)中,應(yīng)盡量避免使用大文件。如果一個(gè)文件里的代碼超過300~400行,就可以考慮將代碼分開到不同的類中;如無法避免,則可以考慮定義partial類。另外,也要盡量避免寫太長的方法,一個(gè)較理想的方法代碼在1~25行之間,方法名應(yīng)盡量體現(xiàn)其功能。比較下面兩段代碼:
(1)一個(gè)好的類,功能獨(dú)立的方法盡量分開。
1. /// 矩形類 2. public class Rectangle:IShape 3. { 4. public double dblWidth; //寬 5. public double dblHeitht; //高 6. 7. /// 求矩形面積 8. public double GetArea() 9. { 10. return this.dblHeitht*this.dblWidth; 11. } 12. 13. /// 求周長 14. public double GetRoundLength() 15. { 16. return this.dblHeith+this.dblWidth; 17. } 18. }
(2)不好的類:
1. /// 矩形類 2. public class Rectangle:IShape 3. { 4. public double dblWidth; //寬 5. public double dblHeitht; //高 6. 7. /// 求矩形面積和周長 8. public double GetData(ref double_dblArea,ref double_dblRoundLengh) 9. { 10. _dblArea=this.dblHeitht*this.dblWidth; 11. _dblRoundLengh=this.dblHeitht+this.dblWidth; 12. } 13. }
第二段代碼把多個(gè)功能融合在一個(gè)方法里,一方面邏輯比較混亂,另一方面也容易使方法變得非常大,不易管理。
承上啟下
■ 學(xué)完本章后,讀者需要回答:
1.用戶在瀏覽網(wǎng)頁時(shí),頁面文件經(jīng)歷了怎樣的過程才呈現(xiàn)在用戶眼前?
2.靜態(tài)網(wǎng)頁和動(dòng)態(tài)網(wǎng)頁有何區(qū)別?
3.了解Java、JavaScript、CSS,以及Flash嗎?
4.能否獨(dú)立完成最簡單的一個(gè)ASP.NET程序,在頁面上顯示幾行字?
5.C#是什么?有哪些數(shù)據(jù)類型?
6.如何定義C#合法的變量和常量?
7.C#中的運(yùn)算符有哪些?了解它們的優(yōu)先級別嗎?
8.能夠使用流程控制語句組織代碼嗎?
9.如何從編碼結(jié)構(gòu)、注釋風(fēng)格、命名規(guī)范,以及控制文件大小方面,寫出高質(zhì)量的代碼?
■ 在下一章中,讀者將會(huì)了解:
1.動(dòng)態(tài)網(wǎng)頁的運(yùn)行機(jī)制。
2.ASP.NET的功能和特點(diǎn)。
3.ASPX頁面的構(gòu)成。
4.將C#代碼嵌入HTML中的方法,以及ASP.NET將HTML和C#代碼分離的機(jī)制。
5.利用服務(wù)器控件的事件對ASPX頁面作出動(dòng)態(tài)響應(yīng)。
6.利用ASPX頁面的Page Load事件在頁面加載時(shí)執(zhí)行命令。
- DB2 V9權(quán)威指南
- Unreal Engine Physics Essentials
- 實(shí)用防銹油配方與制備200例
- Python機(jī)器學(xué)習(xí)實(shí)戰(zhàn)
- 微信小程序開發(fā)解析
- 精通MATLAB(第3版)
- Learning JavaScript Data Structures and Algorithms
- R語言與網(wǎng)絡(luò)輿情處理
- OpenGL Data Visualization Cookbook
- Internet of Things with ESP8266
- Learning JavaScript Data Structures and Algorithms(Second Edition)
- Python 3快速入門與實(shí)戰(zhàn)
- 零基礎(chǔ)學(xué)Java第2版
- Python第三方庫開發(fā)應(yīng)用實(shí)戰(zhàn)
- HTML并不簡單:Web前端開發(fā)精進(jìn)秘籍