官术网_书友最值得收藏!

第1篇 從零開始

0 學習Web開發必備知識

本章專門針對性完全沒有Web開發基礎的讀者,從什么是網頁開始講起,一直到Web開發基礎環境的搭建和配置。本書所有Web開發都是使用C#語言完成的,本章就C#的基本概念和基礎語法,進行了詳細的講解。在開發工具方面,本書采用了微軟最新推出的Visual Studio 2008開發套件,Internet信息配置是使用最新版本的IIS 7,瀏覽器使用的是IE 7.0。

本章從網頁搭建、編程規范等非?;A的開發人員知識入手,介紹了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代碼?!?lt;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”指定固定的值,也不算是常量?!皊tring”用來定義常量的類型,注意常量在命名時,通常使用大寫字母。

變量就是經常發生變化的數據,如計算登錄人數的變量“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#最基本的運算,就是為某個變量指定值?!癷nt 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事件在頁面加載時執行命令。

主站蜘蛛池模板: 界首市| 固阳县| 盈江县| 沙雅县| 星子县| 怀来县| 桑植县| 南康市| 化德县| 会理县| 苏州市| 华坪县| 巴东县| 手游| 芦山县| 游戏| 江门市| 富平县| 泊头市| 定南县| 长沙县| 双流县| 富顺县| 布拖县| 新闻| 张家港市| 淮阳县| 布尔津县| 诏安县| 广昌县| 东乌珠穆沁旗| 麻栗坡县| 靖安县| 武川县| 甘孜县| 合江县| 辽源市| 深泽县| 建始县| 巍山| 珠海市|