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

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

圖0.2 一個簡單的靜態網頁
靜態網頁可以算是第一代網頁,靜態網頁只顯示基本內容,根本無法與用戶交互。要想與用戶交互,就需要動態網頁,動態網頁包括靜態部分和動態部分,靜態部分依然由HTML語言組成,而動態部分則由JavaScript和VBScript組成。因為VBScript只能用在IE瀏覽器上,所以JavaScript更為通用,可以用在任意瀏覽器上。下面是添加了JavaScript代碼的動態網頁,其中要在網頁中添加JavaScript代碼,必須添加“script”標記,而且需要使用“language”屬性指明腳本使用的語言。
1. <html> 2. <head> 3. <title>第一個靜態頁面</title> 4. <script language="javascript"><!—指明腳本的語言 --> 5. function jiaohu() <!—按鈕調用的方法--> 6. { 7. alert("您單擊了提交按鈕");<!- 單擊按鈕后彈出一個提示框--> 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語法可參考專業的JavaScript書籍。
上述代碼生成的頁面如圖0.3所示,用戶可以輸入內容,單擊“提交”按鈕,瀏覽器會根據JavaScript的設計給出交互,其效果如圖0.4所示。

圖0.3 一個動態網頁

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

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

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

圖0.7 VS2008的安裝界面
6 安裝完成后,單擊“完成”按鈕,結束安裝過程。
0.2.2 Visual Studio 2008 IDE簡介
單擊“開始|所有程序|Microsoft Visual Studio 2008”中的“Microsoft Visual Studio 2008”可執行文件,打開VS2008的開始界面,如圖0.8所示。圖中標注出了需要注意的各個區域。其中開始學習文檔,提供一些入門者案例和文檔,讀者除了看書之外,也可以經常閱讀這些文檔,有助于了解一些更深入的知識點。VS開發新聞區域,如果連接了網絡,則會顯示一些最新的VS開發文檔和注意事項。

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

圖0.9 新建項目模板
0.2.3 實現第一個ASP.NET程序
單擊“開始”|“所有程序”|“Microsoft Visual Studio 2008”中的“Microsoft Visual Studio 2008”命令,啟動Visual Studio 2008,如圖0.10所示。

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

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

圖0.12 新建一個Visual C# ASP.NET項目
此時應用程序會生成兩個文件:一個擴展名為“aspx”的文件和一個名字相同但擴展名為“cs”的文件。其中“aspx”文件是必需的,是ASP.NET程序的界面;“cs”是C#源代碼文件的擴展名,C#源代碼文件實現ASP.NET程序的功能。
在新的應用程序建立后,會生成一個空白窗體,也就是擴展名為“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>無標題頁</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>,保存。然后運行這個例子,效果如圖0.13所示。

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

圖0.14 “Windows功能”對話框
3 圖0.14中可以找到Internet信息服務的選項,展開其所有節點,如圖0.15所示。

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

圖0.16 “Internet信息服務管理器”窗口
3 在左側的Default Web Site節點單擊鼠標右鍵,在彈出的快捷菜單上選擇“瀏覽”命令。系統會打開一個IE窗口顯示該網頁,如圖0.17所示。

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

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

圖0.19 “編輯網站綁定”窗口
4 關閉這些窗口,右擊“Default Web Site”節點,選擇“高級屬性”菜單,打開“高級設置”窗口,如圖0.20所示。

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

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

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

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

表0.3 關系運算符包含的運算

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

圖0.23 根據方法注釋給出提示
這樣,在調用方法時便可以更加方便。
0.5.3 好的命名規范
在C#編碼中,常常使用到的命名規范有:
○ Pascal大小寫規范:所有單詞第一個字母大寫,其他字母小寫。
○ Camel大小寫形式:除了第一個單詞,所有單詞第一個字母大寫,其他字母小寫。
在C#中,推薦的命名規范如下:
(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)變量和方法參數使用Camel大小寫形式,如:
1. public class HelloWorld 2. { 3. int totalCount=0; 4. void SayHello(string name) 5. { 6. string fullMessage="Hello"+name; 7. … 8. } 9. }
也可以加前綴以表示變量的類型,但實際上C#并不推薦這種方式。
0.5.4 避免文件過大
在開發中,應盡量避免使用大文件。如果一個文件里的代碼超過300~400行,就可以考慮將代碼分開到不同的類中;如無法避免,則可以考慮定義partial類。另外,也要盡量避免寫太長的方法,一個較理想的方法代碼在1~25行之間,方法名應盡量體現其功能。比較下面兩段代碼:
(1)一個好的類,功能獨立的方法盡量分開。
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. }
第二段代碼把多個功能融合在一個方法里,一方面邏輯比較混亂,另一方面也容易使方法變得非常大,不易管理。
承上啟下
■ 學完本章后,讀者需要回答:
1.用戶在瀏覽網頁時,頁面文件經歷了怎樣的過程才呈現在用戶眼前?
2.靜態網頁和動態網頁有何區別?
3.了解Java、JavaScript、CSS,以及Flash嗎?
4.能否獨立完成最簡單的一個ASP.NET程序,在頁面上顯示幾行字?
5.C#是什么?有哪些數據類型?
6.如何定義C#合法的變量和常量?
7.C#中的運算符有哪些?了解它們的優先級別嗎?
8.能夠使用流程控制語句組織代碼嗎?
9.如何從編碼結構、注釋風格、命名規范,以及控制文件大小方面,寫出高質量的代碼?
■ 在下一章中,讀者將會了解:
1.動態網頁的運行機制。
2.ASP.NET的功能和特點。
3.ASPX頁面的構成。
4.將C#代碼嵌入HTML中的方法,以及ASP.NET將HTML和C#代碼分離的機制。
5.利用服務器控件的事件對ASPX頁面作出動態響應。
6.利用ASPX頁面的Page Load事件在頁面加載時執行命令。
- Practical Data Analysis Cookbook
- Learning NServiceBus(Second Edition)
- Mastering Zabbix(Second Edition)
- Microsoft Application Virtualization Cookbook
- 構建移動網站與APP:HTML 5移動開發入門與實戰(跨平臺移動開發叢書)
- C語言程序設計案例精粹
- Hands-On Automation Testing with Java for Beginners
- 從零開始學C#
- Python深度學習原理、算法與案例
- SciPy Recipes
- Practical Microservices
- 會當凌絕頂:Java開發修行實錄
- INSTANT Apache Maven Starter
- OpenStack Sahara Essentials
- Flink原理深入與編程實戰:Scala+Java(微課視頻版)