基于.NET的Web程序設(shè)計知識點總結(jié)
1.網(wǎng)站中的Global.asax文件(如果有的話)必須放在應(yīng)用程序的根目錄下(T)2.利用DetailsView控件添加記錄特別方便,因為不需要另外增加輸入框(T)3.ADO.NET只是ADO的簡單升級(F)
4.數(shù)據(jù)集(DataSet)能夠在斷開與數(shù)據(jù)源連接的情況下工作(T)5.ASP.NET采用的是代碼分離模式(T)
6.離開了網(wǎng)站,aspx頁面可以單獨運行(F)
7.離開了IIS服務(wù)器,.htm頁面可以單獨運行(T)8.在DetailsView中不能顯示符合條件的多條記錄(F)
9.Web服務(wù)器控件的幾個按鈕都可以起到向服務(wù)器提交數(shù)據(jù)的作用(T)10.XML是一種編程語言(F)
1.服務(wù)器控件的AutoPostBack屬性的含義是選擇服務(wù)器控件時,是否自動回送。
。2.要求在某文本框中輸入密碼,一般要將該TextBox控件的TextMode屬性設(shè)置為
Password。
3.Page對象的IsPostBack屬性的含義是指示該頁是否正為響應(yīng)客戶端回發(fā)而加載,或者是否正被首次加載和訪問。如果是響應(yīng)客戶端回發(fā)而加載,其值為True,否則為False。
4.Response對象在使用時是通過使用Page對象的Response屬性而達到的。5.ASP.NET中的頁面跳轉(zhuǎn)可以通過Response對象的Redirect方法實現(xiàn)。
6.ASP.NET中存儲頁面間共享的變量可以通過Session對象或Application對象實現(xiàn)。7.存儲過程的英文原詞為StoredProcedure。
8.ADO.NET包含的5大對象為Connection,Command,DataReader,
DataAdapter,DataSet。
9.使用SqlConnection對象連接到本地的數(shù)據(jù)庫服務(wù)器上的Northwind數(shù)據(jù)庫時,如果使用集成
Windows的身份驗證模式,則連接字符串的寫法為:
SqlConnection
conn=new
SqlConnection("Data
Source=.;Initial
Catalog=Northwind;Integrated
Security=True");。
10.下面是設(shè)置和取出Session對象的代碼。
設(shè)置Session的代碼是:
Session[“greeting”]=”hellowang!”;
取出該Session的對象的語句如下:
Stringgreeting=Session["greeting"].ToString();
11.App_Data目錄用來放置()
A.共享的數(shù)據(jù)庫文件B.共享文件C.被保護的文件D.代碼文件12.文件系統(tǒng)網(wǎng)站非常適合學習使用,因為()A.不需要安裝IISB.網(wǎng)站允許放置在任意目錄下C.能夠進行單獨測試D.A+B13.下面哪種后綴是靜態(tài)網(wǎng)頁文件()A.a(chǎn)spB.aspxC.htmD.jsp
14.在配置GridView控件的SqlDataSource數(shù)據(jù)源控件過程中,單擊【高級】按鈕的目的是()A.打開其他窗口B.輸入新參數(shù)C.生成SQL編輯語句D.優(yōu)化代碼15.SiteMapDataSource能否用來訪問()A.關(guān)系型數(shù)據(jù)B.層次性數(shù)據(jù)C.字符串數(shù)據(jù)D.數(shù)值型數(shù)據(jù)1.ASP.NET中服務(wù)器端控件的AutoPostBack屬性的意義。(答案見P87)
2.ASP.NET中頁面跳轉(zhuǎn)的方式有幾種,并簡述各自的特點。(答案見P137~139)3.在網(wǎng)站中使用母版頁的好處是什么,根據(jù)你的學習經(jīng)歷描述使用母版頁的一般過程。(答案見P228)
擴展閱讀:Net程序設(shè)計知識點
.Net程序設(shè)計
教材:
《VisualC#.NET實用教程》,清華大學出版社參考書:
課程學習的目的:
1學習并掌握.NET技術(shù)、C#的編程方法和面向?qū)ο笏枷耄?/p>
2.學習并掌握ADO.NET技術(shù)及Windows數(shù)據(jù)庫應(yīng)用程序的開發(fā);3.學習并掌握ASP.NET技術(shù)及Web應(yīng)用程序的開發(fā);4.學習并掌握網(wǎng)絡(luò)編程的知識
前期課程基礎(chǔ):
數(shù)據(jù)結(jié)構(gòu)、操作系統(tǒng)、計算機網(wǎng)絡(luò)
授課學時與分配:總學時40學時
1.緒論(2學時)2.C#的編程基礎(chǔ)(2學時)3.面向?qū)ο缶幊蹋?學時)4.Windows應(yīng)用程序(4學時)5.ADO.NET技術(shù)(2學時)6.Windows數(shù)據(jù)庫應(yīng)用程序的開發(fā)(4學時)7.ASP.NET技術(shù)(4學時)8.Web應(yīng)用程序的開發(fā)(3學時)9.網(wǎng)絡(luò)編程基礎(chǔ)(4學時)10.網(wǎng)絡(luò)編程技術(shù)(6學時)11.總結(jié)考試(2學時)
授課時間、地點:
時間為每周一上午8:0012:10;地點為12教學樓A408,B304。第1講.NET綜述
1.1.NET介紹
1.2.NET核心成分簡介
1.2.1公共語言運行庫
1.2.2.NETFramework類庫1.2.3中間語言和程序集1.2.4公共語言規(guī)范1.2.5通用類型系統(tǒng)1.3開發(fā)工具及C#語言
1.3.1開發(fā)工具介紹1.3.2C#語言簡介
1.4基于.NET的應(yīng)用程序
1.4.1SDK和IDE
1.4.2基于.NET的應(yīng)用程序1.5C#程序設(shè)計初步
1.5.1在SDK上開發(fā)控制臺程序
1.5.2在IDE上開發(fā)Windows應(yīng)用程序1.5.3在IDE上開發(fā)Web應(yīng)用程序
第2講C#類型和語句成分
2.1關(guān)鍵字、標識符和注釋
2.1.1關(guān)鍵字
2.1.2標識符及其命名2.1.3注釋2.2C#類型基礎(chǔ)
2.2.1類型分類
2.2.2C#語言的類型系統(tǒng)2.2.3變量
2.2.4常量和文字2.3值類型
2.3.1簡單類型2.3.2枚舉類型2.4數(shù)組類型
2.4.1一維數(shù)組2.4.2多維數(shù)組2.4.3交錯數(shù)組2.4.4Array類簡介2.4.5foreach語句2.5字符串常量
2.5.1創(chuàng)建字符串
2.5.2String字符串的比較2.6結(jié)構(gòu)
2.6.1結(jié)構(gòu)的聲明
2.6.2結(jié)構(gòu)的實例化及應(yīng)用2.7運算符和表達式
2.7.1算術(shù)運算符2.7.2關(guān)系運算符2.7.3邏輯運算符2.7.4位運算符2.7.5賦值運算符2.7.6條件運算符
2.7.7運行符的優(yōu)先級及結(jié)合性2.8數(shù)據(jù)類型轉(zhuǎn)換
2.8.1隱式類型轉(zhuǎn)換2.8.2顯示轉(zhuǎn)換
第3講C#語句
3.1簡單語句
3.1.1表達式語句3.1.2空語句3.1.3復(fù)合語句3.1.4聲明語句3.2選擇語句
3.2.1條件運算符3.2.2if語句3.2.3switch語句3.3循環(huán)語句
3.3.1while循環(huán)3.3.2do_while循環(huán)3.3.3for循環(huán)3.4跳轉(zhuǎn)語句
3.4.1break語句3.4.2continue語句3.4.3goto語句3.4.4return語句3.5命名空間
3.5.1命名空間聲明
3.5.2using命名空間指令3.5.3using別名指令
第4講面向?qū)ο蟪绦蛟O(shè)計基礎(chǔ)-類、對象、方法
4.1面向?qū)ο蟪绦蛟O(shè)計概述4.2類和對象
4.2.1類的聲明4.2.2類的成員4.2.3對象的聲明4.3構(gòu)造函數(shù)
4.3.1默認構(gòu)造函數(shù)4.3.2構(gòu)造函數(shù)的重載4.4析構(gòu)函數(shù)4.5方法
4.5.1方法的聲明及調(diào)用4.5.2方法中的參數(shù)傳遞4.5.3實例方法和靜態(tài)方法4.5.4方法重載4.6運算符重載4.7屬性和索引器
4.7.1屬性的聲明和使用4.7.2索引器的聲明和使用4.7.3屬性和索引器的比較
第5講面向?qū)ο蟪绦蛟O(shè)計-繼承、多態(tài)
5.1類的繼承
5.1.1基類與派生類
5.1.2成員的繼承、添加和隱藏5.1.3base關(guān)鍵字5.2抽象類與封閉類
5.2.1抽象方法、屬性、索引器5.2.2抽象類5.2.3密封類5.3多態(tài)
5.3.1虛成員5.3.2重寫
5.3.3編譯時多態(tài)和運行時多態(tài)
第6講面向?qū)ο蟪绦蛟O(shè)計-接口、委托
1接口
.1接口的定義.2接口的實現(xiàn)2委托和事件
1委托2事件3異常處理
1異常類
2異常處理步驟3拋出異常4捕獲處理異常
第7講Windows應(yīng)用程序
7.1Windows應(yīng)用程序開發(fā)步驟
7.1.1創(chuàng)建窗體
7.1.2添加控件及控件布局7.1.3響應(yīng)事件7.2Windows常用控件
7.2.1文本類控件7.2.2按鈕類控件7.2.3對話框類控件
7.2.4列表框、視圖類控件7.2.5滾動類控件
7.2.6工具欄和狀態(tài)欄控件7.2.7定時器控件7.2.8菜單控件
7.3多文檔界面(MDI)
7.3.1創(chuàng)建MDI父窗體7.3.2創(chuàng)建MDI子窗體
7.3.3確定活動的MDI子窗體7.3.4排列子窗體7.4實例解析
第7講ADO.NET數(shù)據(jù)庫訪問技術(shù)
8.1ADO.NET概述8.2ADO.NET體系結(jié)構(gòu)
8.2.1ADO.NET的總體結(jié)構(gòu)8.2.2DataSet結(jié)構(gòu)
8.2.3.NETFramwork數(shù)據(jù)提供程序
8.2.4ADO.NET開發(fā)數(shù)據(jù)庫應(yīng)用程序的一般步驟8.3數(shù)據(jù)庫的連接
8.3.1Connection連接字符串8.3.2創(chuàng)建并使用連接對象8.4Command對象的使用
8.4.1創(chuàng)建Command對象8.4.2執(zhí)行命令8.4.3參數(shù)化查詢8.4.4執(zhí)行存儲過程8.5DataReader對象的使用
8.5.1創(chuàng)建DataReader對象8.5.2使用DataReader讀取數(shù)據(jù)8.6DataSet和DataAdapter的使用
8.6.1DataSet對象管理數(shù)據(jù)8.6.2使用DataAdapter對象
第9講Windows數(shù)據(jù)庫應(yīng)用程序開發(fā)
9.1數(shù)據(jù)綁定
9.1.1簡單數(shù)據(jù)綁定9.1.2復(fù)雜數(shù)據(jù)綁定9.2數(shù)據(jù)源的類型9.2.1數(shù)組數(shù)據(jù)源9.2.2數(shù)據(jù)表數(shù)據(jù)源9.2.3數(shù)據(jù)集數(shù)據(jù)源
9.3Windows數(shù)據(jù)庫應(yīng)用實例
9.3.1數(shù)據(jù)庫的創(chuàng)建及連接9.3.2主要界面及相關(guān)代碼
第10講ASP.NET技術(shù)
10.1ASP.NET簡介
10.1.1ASP.NET的特點
10.1.2ASP.NET代碼分離技術(shù)10.1.3Web窗體10.2ASP.NET控件
10.2.1HTML服務(wù)器控件10.2.2Web服務(wù)器控件10.2.3驗證控件10.3ASP.NET內(nèi)置對象
10.3.1Response對象10.3.2Request對象10.3.3Server對象10.3.4Session對象10.3.5Application對象
第11講Web應(yīng)用程序開發(fā)基礎(chǔ)
11.1Web數(shù)據(jù)綁定技術(shù)11.2列表類數(shù)據(jù)綁定控件
11.2.1列表控件概述
11.2.2列表類控件數(shù)據(jù)綁定舉例11.3GridView控件
11.3.1GridView控件概述
11.3.2常用屬性、方法和事件11.3.3GridView中的字段類型11.3.4GridView數(shù)據(jù)顯示11.3.5編輯和刪除數(shù)據(jù)
11.3.6分頁顯示數(shù)據(jù)和數(shù)據(jù)排序11.4Global.asax文件11.5Web.config文件
11.5.1配置與調(diào)用數(shù)據(jù)庫鏈接字符串11.5.2配置文件Web.config
第12講網(wǎng)上選課系統(tǒng)的開發(fā)12.1需求分析12.2數(shù)據(jù)庫設(shè)計
12.2.1數(shù)據(jù)庫表12.2.2存儲過程12.3系統(tǒng)設(shè)計12.4數(shù)據(jù)庫連接
12.4.1Web.Config的配置12.4.2調(diào)用連接字符串12.5系統(tǒng)實現(xiàn)
12.5.1登錄界面(Login/Login.aspx)
12.5.2選課界面(student/selectcourse.aspx)12.5.3提交界面(student/tijiao.aspx)
12.5.4學生管理界面(manager/StudentList)
12.5.5選課管理界面(manager/XuanKeList.aspx)
以上為考試范圍
第13講多線程和同步
13.1基本概念
13.1.1多線程概念
13.1.2C#中線程實現(xiàn)方法13.2Thread類
13.2.1Thread類介紹
13.2.2線程的狀態(tài)和生命周期13.2.3線程的優(yōu)先級13.3多線程編程
13.3.1編程步驟13.3.2編程實例13.4線程同步和互斥
13.4.1多個線程同時修改共享數(shù)據(jù)可能發(fā)生的錯誤13.4.2用Lock語句實現(xiàn)互斥13.4.3用Mutex類實現(xiàn)互斥13.4.4用Monitor類實現(xiàn)互斥13.5實例解析
第14講網(wǎng)絡(luò)協(xié)議與套接字編程
14.1TCP/IP網(wǎng)絡(luò)協(xié)議
14.1.1TCP/IP參考模型14.1.2網(wǎng)間協(xié)議IP
14.1.3傳輸控制協(xié)議TCP14.1.4C#中相關(guān)的類14.2套接字編程技術(shù)
14.2.1IP地址和端口14.2.2套接字14.2.3面向連接的套接字14.2.4無連接的套接字14.3套接字編程實例1、.Net包括哪些內(nèi)容?
主要介紹.NET的兩個重要實體:公共語言運行庫(CommonLanguageRuntime,CLR)和.NETFramework類庫(FrameworkClassLibrary,F(xiàn)CL),以及其它核心成分。
2、什么是.NetFramework?
.NET平臺又稱.NET框架(.NETFramework),是.NET的核心組成部分,提供了一個多語言組件開發(fā)和執(zhí)行的環(huán)境一個完全可操控的安全的和特性豐富的應(yīng)用開發(fā)執(zhí)行環(huán)境,這不但使得應(yīng)用程序的開發(fā)和發(fā)布更加簡單,并且實現(xiàn)了眾多種類語言間的無縫集成。
3、公共語言運行庫
公共語言運行庫(CommonLanguageRuntime,CLR)又稱為公共語言運行時或公共語言運行環(huán)境,是.NET系統(tǒng)構(gòu)架中核心的部分,負責執(zhí)行代碼、管理內(nèi)存、提供安全性等核心功能。它是構(gòu)成.NET框架的兩個實體中的一個。
CLR和Java虛擬機一樣是一個運行時環(huán)境,其主要功能包括:
執(zhí)行和管理:完成運行過程中的代碼加載、應(yīng)用程序和托管對象的內(nèi)存管理、對
象自動布局、使用JIT(JustInTime)編譯器將MSIL(Microsoftintermediatelanguage)編譯成本地代碼并且控制代碼執(zhí)行、處理異常等全部步驟。
提供安全保證:類型安全、代碼訪問安全、控制托管和非托管代碼的互操作。對開發(fā)者的支持:提供界面信息,幫助調(diào)試等。
4、代碼執(zhí)行過程
在.NET中,將代碼分為托管代碼(managedcode)和非托管代碼(unmanagedcode)兩種
C#.NET源程序VB.NET源程序
CLS:公共語言運行規(guī)范C#編譯器VB.NET編譯器MSIL:Microsoft中間語言CLR:公共語言運行庫(JIT:justintime編譯器)
本地代碼
代碼執(zhí)行流程
5、開發(fā).NET的應(yīng)用程序使用兩種環(huán)境SDK和IDE,二者區(qū)別與聯(lián)系SDK和IDE分別是Microsoft的softwaredevelopmentkit(軟件開發(fā)工具包)和integrateddevelopmentenvironment(集成開發(fā)環(huán)境)的縮寫。
采用SDK開發(fā),首先使用文本編輯器編寫代碼,然后用命令行編譯和執(zhí)行。開發(fā)控制臺程序通常使用SDK環(huán)境。
IDE是可視化的開發(fā)環(huán)境,所謂可視化編程,是一種自動或半自動的編程方法。在編程過程中,程序員利用系統(tǒng)提供的圖形元素,組合成所需要的界面或組合成能夠體現(xiàn)程序邏輯的流程,系統(tǒng)就能自動地產(chǎn)生部分代碼或全部代碼。在IDE中,程序員可以利用系統(tǒng)中提供的圖形元素組合成界面,開發(fā)Windows窗體應(yīng)用程序和Web應(yīng)用程序。
6、IDE上直接支持的應(yīng)用程序的主要類型有哪些?
1、Windows應(yīng)用程序
Windows應(yīng)用程序是基于Windows窗體(WindowsForms)的應(yīng)用程序,是一種基于圖形界面接口GUI的應(yīng)用程序,一般是在用戶計算機本地運行。
2、Windows控件庫
可以創(chuàng)建Windows窗體應(yīng)用程序的自定義控件,以方便用戶的使用。3、ASP.NETWeb應(yīng)用程序
ASP.NET是.NET中統(tǒng)一的Web開發(fā)平臺,可以用來開發(fā)企業(yè)級的Web應(yīng)用程序。ASP.NET使程序員能夠像設(shè)計Windows窗體應(yīng)用程序一樣設(shè)計Web應(yīng)用程序,并且采用代碼分離技術(shù),使代碼與HTML文檔分離,方便代碼重用,還具有服務(wù)器控件的開發(fā)能力,能夠在IDE中進行可視化的開發(fā)。
4、ASP.NETWebService
WebService是Microsoft的.NET戰(zhàn)略中的重點,由于XML(extensiblemarkuplanguage)是當今Internet和各類系統(tǒng)之間數(shù)據(jù)交換的標準,所以也稱為XMLWebServices,它可以實現(xiàn)客戶端服務(wù)器或服務(wù)器客戶端之間的數(shù)據(jù)交換。
XMLWebServices采用松耦合的分布式結(jié)構(gòu),不與特定的組件技術(shù)或?qū)ο笳{(diào)用約定相關(guān)聯(lián),也與編程語言、組件模型、操作系統(tǒng)等無關(guān)。一般的Web程序,如瀏覽器,是人與程序的對話,而WebService是程序與程序的對話。WebService是公認的Internet下一個最大的浪潮,也是Internet應(yīng)用中最有影響的服務(wù)。
5、智能設(shè)備應(yīng)用程序
Internet不僅可以連接PC機、服務(wù)器等計算機設(shè)備,也可以連入電視機、電冰箱、打印機等家用的或辦公的電器,可以通過Internet進行遠程控制,智能設(shè)備應(yīng)用程序就是連接、控制這些設(shè)備,并互相通信的應(yīng)用程序。
6、ASP.NET移動Web應(yīng)用程序
此類應(yīng)用程序應(yīng)用于能無線上網(wǎng)的移動數(shù)字設(shè)備,常見的移動設(shè)備有移動電話、PDA、筆記本電腦等。.NET提供移動控件來連接移動設(shè)備的設(shè)備適配器,在.NET上開發(fā)移動Web應(yīng)用程序的過程和開發(fā)其它Web應(yīng)用程序類似。
7、C#語言支持的兩種基本數(shù)據(jù)類型
值類型和引用類型。理解這兩種類型的區(qū)別是理解C#語言各種類型及其用法的基礎(chǔ)。值類型:值類型變量存放在棧里,所以直接包含有它們的數(shù)據(jù),每個值類型變量
都有它自己的副本,因此對一個變量的操作不會影響到另一個變量。
引用類型:引用類型的存儲分為兩部分,引用類型中對數(shù)據(jù)的引用存放在棧里面,
而引用類型的數(shù)據(jù)存放在堆里面。所以引用類型變量的名不包含它的數(shù)據(jù),而是只包含對它的數(shù)據(jù)的引用。引用類型變量的數(shù)據(jù)存儲在一個實例中,不同的變量可以引用同一個對象的實例,因此在對一個引用變量操作時,改變實例值時將會影響其他引用這個實例的引用變量,在編程中要格外注意。8、C#語言提供了兩種實現(xiàn)繼承的方式:類的繼承和接口繼承。他們的區(qū)別與聯(lián)系.通常把作為基礎(chǔ)、被繼承的類稱為基類,繼承別的類的子類稱為派生類。一個類從另一個類派生出來時,派生類從基類那里繼承特性。派生類也可以作為其它類的基類。C#中,派生類只能從一個類中繼承,不支持多繼承的機制。如果必須使用多重繼承,可以使用接口繼承來實現(xiàn)。
9C#的關(guān)鍵字abstractchardofinallyinnewsizeoftrueusingnewabstractsealedpublicprotectedinternalprivate只允許用在嵌套類中,表明隱藏了從基類繼承而來、與基類中同名的成員說明該類是一個抽象類,該類含有抽象成員,因此不能被實例化,只能用來做其他類的基類,而不能產(chǎn)生對象說明該類是一個密封類,不能做其他類的基類,不能再派生新的類表示外界可以不受限制的訪問該類。類的訪問權(quán)限省略時默認為public該類只能被這個類的成員或類派生成員訪問表示該類能由程序集中的所有文件使用,而不能由程序集之外的對象使用表示該類只能被這個類的成員訪問ascheckeddoublefixedintnullstackalloctryvirtualbaseclasselsefloatinterfaceobjectreadonlystatictypeofvolatileboolconstenumforinternalrefstringuintvoidbreakcontinueeventforeachisreturnstructulongwhilebytedecimalexplicitgotolockoverridesbyteswitchuncheckedcasedefaultexterniflongparamssealedthisunsafecatchdelegatefalseimplicitnamespaceprivateshortthrowushortoperatoroutprotectedpublic
10、C#的基本數(shù)據(jù)類型
值類型簡單類型用戶自定義類型枚舉類型接口用戶自定義類型指針類型類型引用類型類類型數(shù)組委托字符串用戶自定義類型接口指針類型
圖2.1C#的類型值類型包括三種:簡單類型、枚舉類型和自定義類型(這里指結(jié)構(gòu))。將在2.3小節(jié)介紹前兩種值類型,在第5章介紹結(jié)構(gòu)類型。
引用類型包括類(class)、接口(interface)、委托(delegate)、數(shù)組(array)、字符串(String)和Object以及不提倡使用的指針類型。習慣將引用類型的變量稱為對象,而值類型的變量仍然稱為變量。引用類型和值類型的最大區(qū)別是引用類型的數(shù)據(jù)存儲在堆中,而在棧中存儲它的數(shù)據(jù)的引用。
位運算符“>1);輸出結(jié)果是:
有符號數(shù)右移1位:-128無符號數(shù)右移1位:128
知識點匯總
1、什么是面向?qū)ο蟪绦蛟O(shè)計?
2、什么是類?類的多態(tài)、封裝、繼承作用是什么?
類的成員由兩部分組成,一部分是類體中以類成員聲明形式引入的類成員,另一部分是直接從它的基類繼承而來的成員。類的成員主要包括數(shù)據(jù)成員和方法成員,類是完成對它們封裝的結(jié)構(gòu)類型。類的數(shù)據(jù)成員可以是常量、字段和對象等。方法成員包含方法、屬性、索引器、事件、操作符、構(gòu)造函數(shù)、析構(gòu)函數(shù)等。當字段、方法、屬性、事件、運算符和構(gòu)造函數(shù)聲明中含有static修飾符時,則表明它們是靜態(tài)成員,否則就是實例成員。靜態(tài)成員屬于類,而實例成員屬于對象。
類成員聲明時,可以使用以下5種訪問修飾符中的一種:public、protected、internal、private、protectedinternal。當類成員聲明中不包含訪問修飾符時,默認訪問修飾符為private。
多態(tài)就是指一個成員在不同的上下文中表現(xiàn)出不同的功能。多態(tài)是面向?qū)ο蟪绦蛟O(shè)計中重要概念和常見技術(shù),也是一種代碼重用技術(shù)。虛成員和虛成員的重寫是多態(tài)技術(shù)的基礎(chǔ)。
根據(jù)C#是在編譯時還是在運行時確定得調(diào)用不同類對象的哪個同名成員,將多態(tài)分為如下兩種:編譯時多態(tài)和運行時多態(tài)。
編譯時多態(tài)是指在編譯時就能確定調(diào)用什么對象中的成員,也稱為早綁定。隱藏、重載都屬于早期綁定,即編譯時多態(tài)。運行時多態(tài)是指只有當運行時才能確定調(diào)用哪個對象中的成員,又稱為晚綁定。虛方法、重寫是晚綁定,即運行時多態(tài)。一般所說的多態(tài)性均為運行時多態(tài)。
3、構(gòu)造方法(構(gòu)造函數(shù))
構(gòu)造函數(shù)的重載是常見的現(xiàn)象,同一個類中有多個構(gòu)造函數(shù),區(qū)別他們的依據(jù)是參數(shù)列表,同一個類中任意兩個構(gòu)造函數(shù)的參數(shù)列表必須不同,參數(shù)列表只要具備下列條件之一,就可以認為是不同的參數(shù)列表,進而可以認為是兩個重載的構(gòu)造函數(shù):
1)參數(shù)列表中參數(shù)個數(shù)不同;
2)參數(shù)列表中參數(shù)個數(shù)相同,但參數(shù)類型不同;
3)參數(shù)列表中參數(shù)個數(shù)相同,參數(shù)類型種類也相同,但排列的次序不同。
4、屬性
屬性由兩部分組成:屬性頭和存取器。存取器分為get訪問器和set訪問器。下面給出屬性的聲明。
語法形式:
[修飾符]類型說明符屬性名{
訪問聲明}
其中:修飾符new,public,protected,internal,private,static,virtual,override和abstract9種。
訪問聲明用來聲明屬性訪問器。給屬性賦值時使用set訪問器,獲取屬性值時使用get訪問器。在訪問聲明中,如果只有g(shù)et訪問器,表示是只讀屬性;如果只有set訪問器,表示只寫屬性;兩個都有,表示讀寫屬性。
set訪問器是一個帶有簡單值類型參數(shù)的方法,用于處理類外部的寫入值。set訪問器帶有一個特殊的關(guān)鍵字value,value就是set訪問器的隱式參數(shù),在set中通過value將外部的輸入傳遞進來,然后賦值給類中的某個變量成員。get訪問器是一個不帶參數(shù)的方法,它用于向外部返回屬性成員的值。通常訪問函數(shù)的語句或語句塊主要由return或throw語句返回某個變量成員的值。為了實現(xiàn)良好的數(shù)據(jù)封裝和數(shù)據(jù)隱藏,類的字段成員的訪問屬性一般設(shè)置為private或protected,這樣在類的外部就不能直接讀/寫這些字段了,通常的辦法是提供public級的方法來訪問私有的或保護的字段。為了實現(xiàn)對數(shù)據(jù)成員更好地封裝和保護,同時又向外界提供更有效的訪問形式,C#采用屬性來實現(xiàn)這種目標。屬性是一種特殊的成分,它具有方法的本質(zhì),又具有字段的形式,即屬性的定義類似于方法的定義,屬性的使用類似于字段的使用。屬性完善了C#的封裝功能,使得所有的數(shù)據(jù)成員都可以成為私有成員,從而更好地體現(xiàn)了面向?qū)ο蟪绦蛟O(shè)計的封裝性。
5、索引器
索引器允許按照與數(shù)組相同的方式對類、結(jié)構(gòu)或接口進行索引。索引器類似于屬性,不同之處在于它們的訪問器采用參數(shù)。下面給出索引器的聲明。語法形式:
[修飾符]索引器聲明符{
訪問器聲明}其中:
修飾符可以是new、virtual、sealed、override、abstract、extern以及public、protected、internal、private四個訪問修飾符的有效組合。注意,索引器修飾符不可以是static的。
索引器聲明符的形式有兩種,分別是:類型this[形參表]或
類型接口類型this[形參表]
注意此處“[]”不表示可選,是索引器聲明符的必要部分。而this是C#中的關(guān)鍵字,除了可以聲明索引器以外,還用于限定被相似的名稱隱藏的成員、將對象作為參數(shù)傳遞到其它方法。
訪問器聲明,也要使用get()和set()訪問器,不同的是使用索引指示器取得的對象是對象中各元素的值,而不是特定的數(shù)據(jù)成員。使用索引器的形式為:對象名.[實參]
使用索引器也是C#的一個特色,一個類往往包含了數(shù)組型的對象,索引器使得可以像數(shù)組那樣對對象使用下標,為我們提供了通過索引方式方便地訪問類的數(shù)據(jù)信息的方法。6、抽象類特點是什么?舉例說明
用關(guān)鍵字abstract修飾的抽象類是一種沒有被完整定義的類,因此它不能用來實例化,也就是說,不能產(chǎn)生對象。設(shè)計abstract類的目的是為了被繼承,其意義在于:1)、包含派生類的公有成員。這些公有成員在抽象類中定義一次,就可以被反復(fù)使用,提高軟件開發(fā)的效率和可維護性。2)、規(guī)范行為。抽象方法等具體行為特征的成員實際上是一種建模過程,規(guī)定了輸入口和輸出口,而將實現(xiàn)的細節(jié)留給派生類根據(jù)實際情況編程。同一個抽象類的派生類有許多共性,這使得它們有了交互的基礎(chǔ)。下面給出抽象類的聲明。
語法形式:
abstractclass類名{
}抽象類不能產(chǎn)生實例,因此不能這樣書寫代碼,如:
抽象類名對象名=new抽象類名(參數(shù)列表)new抽象類名(參數(shù)列表)。這樣的代碼都是錯誤的。設(shè)計抽象類時要注意以下幾點:1)、抽象類雖然不能產(chǎn)生對象,但可以有構(gòu)造函數(shù)。2)、抽象類是要被繼承的,所以不能和sealed修飾符聯(lián)用。
3)、抽象類的派生類可以依然是抽象類,只有當派生類實現(xiàn)了所有抽象成員后,才演化為一個普通的類,這時才能產(chǎn)生對象。
7、抽象方法
用abstract修飾的方法、屬性和索引器分別稱為抽象方法、抽象屬性、和抽象索引器。它們共同特點是只有行為的定義,卻沒有行為的實現(xiàn)。
抽象方法是只有方法頭,沒有方法體的方法。抽象方法的聲明格式如下。語法形式:
abstract返回類型方法名(參數(shù)列表);
抽象方法規(guī)定了方法的輸入?yún)?shù)的類型和數(shù)量以及輸出的類型,以此定義了方法的激勵和響應(yīng)的形式,而在內(nèi)容上可由實現(xiàn)者任意實現(xiàn),因此僅憑抽象方法的定義來判斷方法的功能是不可靠的。
抽象屬性中可以選擇get和set關(guān)鍵字,但沒有具體的執(zhí)行語句,抽象屬性的聲明格式如下。
語法形式:
abstract返回類型屬性名{get;set;}
而抽象索引器的聲明形式和抽象屬性的很相似。語法形式:
abstract返回類型this[參數(shù)列表]{get;set;}
在用到abstract關(guān)鍵字時,需要注意以下幾點:1)、abstract不能和static同時修飾同一個方法。2)、abstract也不能和private同時修飾同一個方法,并且不能省略訪問控制符。3)、abstract方法只能出現(xiàn)在abstract類中,并且只有當包含此抽象方法的抽象類被繼承之后,才能在派生類中被實現(xiàn)。
4)、派生類實現(xiàn)抽象方法時必須使用關(guān)鍵字override,否則被默認為是缺省的關(guān)鍵字new。8、接口
接口是抽象成員的集合,這些抽象成員可以是抽象方法、屬性、索引器、事件,接口是實現(xiàn)多繼承的工具。實際上,接口是一些實現(xiàn)特定功能的抽象成員的集合。一個類可以繼承多個接口,從而獲得多個行為的描述,將它們組合成新的功能并在類中實現(xiàn)。
接口的聲明。
語法形式:
[接口修飾符]interface接口名:[基接口列表]{
接口體}
其中:
接口修飾符有new、public、protected、internal、private。Interface聲明接口時的關(guān)鍵字。
接口名一個標識符,首字母為大寫的I!埃骸北硎纠^承,接口可以多繼承。
基接口列表是一個或多個基接口類型,正在被定義的接口將繼承基接口列表中的所有基接口,出現(xiàn)在基接口列表中的基接口也可能繼承了其他的接口,為了方便區(qū)分,把出現(xiàn)在基接口列表中的基接口稱為顯式基接口;涌谥g用“,”分割。接口繼承其所有基接口的所有成員,也可以用new隱藏基接口的成員
usingSystem;
publicinterfaceIgram//聲明圖形接口{
doubleArea();
doubleGramLength();intSides{get;}}
publicinterfaceIDisplay//聲明輸出接口{
voidPrint();}
publicclassSquare:Igram,IDisplay{
privateintsides;
publicintSideLength;publicSquare()//構(gòu)造函數(shù){
sides=4;}
publicintSides//實現(xiàn)Igram接口的Sides屬性成員{
get{returnsides;}}
publicdoubleArea()//實現(xiàn)Igram接口的Area方法成員{
return((double)(SideLength*SideLength));}
publicdoubleGramLength()//實現(xiàn)Igram接口的GramLength方法成員{
return((double)(Sides*SideLength));}
publicvoidPrint()//實現(xiàn)IDisplay接口的Print方法成員{
Console.WriteLine("\\n計算正方形面積結(jié)果如下:");Console.WriteLine("邊長:{0}",this.SideLength);Console.WriteLine("周長:{0}",this.GramLength());Console.WriteLine("面積:{0}",this.Area());}}
publicclassApp{
publicstaticvoidMain(){
Squaresq=newSquare();sq.SideLength=5;sq.Print();}}
運行結(jié)果:
在同一個類Square中實現(xiàn)了兩個接口:Igram和IDisplay。
9、參數(shù)傳遞
C#中傳入到方法中的參數(shù)不同,可分為4種:傳遞值類型的參數(shù)、傳遞引用類型的參數(shù)、傳遞多個引用類型參數(shù)和傳遞個數(shù)不確定的參數(shù)。
傳遞多個引用類型參數(shù)
return語句一次只能返回一個結(jié)果,針對這種情況,C#提供了一種特殊的參數(shù)傳遞方式:傳遞多個引用類型參數(shù)。完成這種數(shù)據(jù)傳遞方式所使用的是輸出型參數(shù),用關(guān)鍵字out表示。與引用型參數(shù)類似,輸出型參數(shù)也不開辟新的內(nèi)存區(qū)域。它與引用型參數(shù)的區(qū)別:調(diào)用方法前無需對變量進行初始化,正因為如此,在out參數(shù)沒有被顯示地賦值之前,不能使用。在將實參作為輸出型參數(shù)傳遞的調(diào)用完成后,該實參變量將會被該方法中的形參明確賦值,并將數(shù)據(jù)從方法中傳出至調(diào)用處。out修飾符后應(yīng)跟隨形參類型相同的類型聲明。
下面給出輸出型參數(shù)的實例,usingSystem;
publicclassCalculate{
publicvoidCal(intinNum,outintoutNum1,outintoutNum2){
outNum1=inNum*inNum;outNum2=inNum*10;}}
classTest{
publicstaticvoidMain(){
Calculatecal=newCalculate();intoutnum1;//不必初始化intoutnum2;//不必初始化
cal.Cal(35,outoutnum1,outoutnum2);
Console.WriteLine("outnum1:{0}",outnum1);Console.WriteLine("outnum2:{0}",outnum2);}}
運行結(jié)果:
傳遞個數(shù)不確定的參數(shù)
當需要傳遞的參數(shù)個數(shù)不確定時,如求幾個數(shù)的最大值,由于沒有規(guī)定是幾個數(shù),運行程序時,每次輸入的值的個數(shù)不一定一樣。為了解決這個問題,C#采用參數(shù)數(shù)組。形參數(shù)組前如果用params修飾符進行聲明就是參數(shù)數(shù)組,通過參數(shù)數(shù)組可以向函數(shù)傳遞個數(shù)變化的參數(shù)。usingSystem;classParamsTest{
staticintParamsMeth(refintsum,paramsint[]arr){
inti;
for(i=0;i
sum=sum+arr[i];arr[i]=arr[i]*arr[i];}
return(arr[arr.Length-1]);}
staticvoidMain(){
int[]a={1,2,3};inti,L;
ints=0,z=0;
ParamsMeth(refs,a);//數(shù)組作為實參
Console.WriteLine("數(shù)組作為實參的結(jié)果:");Console.WriteLine("和為:{0}",s);for(i=0;i
Console.WriteLine("a[{0}]={1}",i,a[i]);
Console.WriteLine("與形參數(shù)組的元素屬于同一類型的變量做實參的結(jié)果:");L=ParamsMeth(refz,23,45);//與形參數(shù)組的元素屬于同一類型的變量做實參Console.WriteLine("和為:{0}",z);
Console.WriteLine("輸入最后數(shù)值的乘積:{0}",L);}}
運行結(jié)果:
10、語句
常用的簡單語句包括賦值語句、空語句、表達式語句、復(fù)合語句等C#中常用的三種分支技術(shù):條件運算符;if語句;switch語句。C#提供了4種循環(huán)語句:while、do_while、for和foreachbreak語句、continue語句、goto語句、return語句等。1)break語句
除了在switch語句中使用break語句,它還用于循環(huán)結(jié)構(gòu)中,作用是結(jié)束其所在的結(jié)構(gòu)語句。它的格式是:break;
break語句的目標地址為包含它的switch、while、do、for、或foreach語句的結(jié)尾,如果不在這些語句塊中,編譯將出錯。2)continue語句
continue語句用于循環(huán)結(jié)構(gòu)中,其作用是結(jié)束本次循環(huán),即跳過循環(huán)體中下面尚未執(zhí)行的語句,接著進行下一次是否執(zhí)行循環(huán)體的判定。格式是:continue;continue語句重新開始一次包含它的while、do、for、或foreach語句的執(zhí)行,其目標地址也是上述這些語句的內(nèi)嵌語句結(jié)尾,如果不在這些語句塊中,編譯將出錯。
continue語句和break語句的區(qū)別是:continue只跳出一次循環(huán),而break語句則跳出整個循環(huán)語句或switch語句。當有switch、while、do、for或foreach語句相互嵌套的時候,break語句只是跳出直接包含它的那個語句塊。如果要在多處嵌套語句中完成轉(zhuǎn)移,必須使用goto語句。3)goto語句
goto語句的功能是將控制轉(zhuǎn)到由標簽標記的語句。格式是:goto標號標識符;
需要注意的是,goto語句使用比較方便,但是容易引起邏輯上的混亂,因此除了在switch語句中必須從一個case跳到另一個case的情況下可以使用goto語句外,其他情況下最好不要使用goto語句。4)return語句
return語句的功能是從它所在的子函數(shù)返回該子函數(shù)的調(diào)用者。格式:return[表達式];
注意,此處的“[]”符號,表示其里面的表達式是可選的。
不帶表達式的return語句只有在不需要計算數(shù)值的子函數(shù)中出現(xiàn),也就是,其返回類型為void。帶表達式的return語句只能用在計算數(shù)值的函數(shù)成員中,也就是其返回類型是非void。
5)throw語句,它的作用是拋出異常
11、公共語言運行庫(CommonLanguageRuntime,CLR)
12、NETFramework類庫(FrameworkClassLibrary,F(xiàn)CL)
1)System.Object類
2)異常處理Exception3)文件類
System.IO中包含用于在文件中讀取和寫入數(shù)據(jù)的類。
System.IO.Directory公開用于創(chuàng)建、移動和枚舉目錄和子目錄的靜態(tài)方法。System.IO.File提供用于創(chuàng)建、復(fù)制、刪除、移動和打開文件的靜態(tài)方法。System.IO.Path處理路徑名稱。
System.IO.DirectoryInfo公開用于創(chuàng)建、移動和枚舉目錄和子目錄的實例方法。System.IO.FileInfo創(chuàng)建、復(fù)制、刪除、移動和打開文件的實例方法System.IO.FileStream以文件為主的Stream,既支持同步讀寫操作,也支持異步讀寫操作。
System.IO.StreamReader從字節(jié)流中讀取字符。System.IO.StringWriter向流中寫入字符。
System.IO.FileSystemWatcher偵聽文件系統(tǒng)更改通知,并在目錄或目錄中的文件發(fā)生更改時引發(fā)事件。
StreamReader,StreamWriter完成文件的讀寫操作,String.Split()完成字符串的拆分。
openFileDialogsaveFileDialog
引用一個OpenFileDialog對象.為檢查用戶在退出對話框時是否單擊了”打開”按鈕,應(yīng)檢查對象.ShowDialog()的返回值是否等于DialogResult.OK
用FileStream打開一個文件時,可用FileMode參數(shù)控制4)圖形類
Pen類的構(gòu)造函數(shù)有四種,使用方法如下。(1)創(chuàng)建某一顏色的Pen對象:publicPen(Color)(2)創(chuàng)建某一刷子樣式的Pen對象:publicPen(Brush)
(3)創(chuàng)建某刷子樣式并具有相應(yīng)寬度的Pen對象:publicPen(Brush,float)(4)創(chuàng)建某一顏色和相應(yīng)寬度的Pen對象:publicPen(Color,float)Pen對象的常用屬性
(1)Alignment屬性:用來獲取或設(shè)置此Pen對象的對齊方式。(2)Color屬性:用來獲取或設(shè)置此Pen對象的顏色。畫橢圓
[格式1]:publicvoidDrawEllipse(Penpen,Rectanglerect);
[格式2]:publicvoidDrawEllipse(Penpen,intx,inty,intwidth,intheight);
(3)Width屬性:用來獲取或設(shè)置此Pen對象的寬度。畫矩形
[格式1]:publicvoidDrawRectangle(Penpen,Rectanglerect);[格式2]:publicvoidDrawRectangle(Penpen,intx,inty,intwidth,intheight);
13、異常處理都處理哪些錯誤,舉例說明;
異常(Exception)是程序執(zhí)行時遇到的任何錯誤情況或意外行為。如除數(shù)為零、分配內(nèi)存空間失敗,都能引發(fā)異常。異常處理(ExceptionHanding)指的是一種機制或方法,通過它,用戶創(chuàng)建的應(yīng)用程序能夠解決或處理異常。
C#提供了一個標準類System.Exception,此類是所有異常的基類;怑xception下存在兩類異常:一個是從SystemException派生的預(yù)定義公共語言運行庫異常類,另一個是從ApplicationException派生的用戶定義的應(yīng)用程序異常類。Exception包含很多屬性,可以幫助標識異常的代碼位置、類型、幫助文件和原因,常用屬性如下所示:
HelpLink屬性:獲取或設(shè)置指向此異常所關(guān)聯(lián)幫助文件的鏈接。InnerException屬性:獲取導(dǎo)致當前異常的Exception實例。Message屬性:獲取描述當前異常的消息。
Source屬性:獲取或設(shè)置導(dǎo)致錯誤的應(yīng)用程序或?qū)ο蟮拿Q。
StackTrace屬性:獲取當前異常發(fā)生時調(diào)用堆棧上的幀的字符串表示形式。argetSite屬性:獲取引發(fā)當前異常的方法。
14、ADO.NET有哪些數(shù)據(jù)對象?各有什么功能?
NETFramework數(shù)據(jù)提供程序的實質(zhì)是數(shù)據(jù)源與應(yīng)用程序的橋梁,并且都有一定的標準,它們都實現(xiàn)了相同的基類:Connection、Command、DataAdapter和DataReader.Connection對象主要用于建立與數(shù)據(jù)源的活動連接。
Command對象可以對數(shù)據(jù)源執(zhí)行查詢、插入、刪除、更新等各種操作。
DataReader對象是從一個數(shù)據(jù)源中選擇某些數(shù)據(jù)的最簡單方法,尤其適合讀取大量的數(shù)據(jù),因為它不在內(nèi)存中緩存。
DataAdapter是連接到數(shù)據(jù)庫以填充DataSet對象
usingSystem;
usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Text;
usingSystem.Windows.Forms;usingSystem.Data.OleDb;db1.OleDbConn.Open();OleDbCommand
OleDbConnectionOleDbConn=newOleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;dataSource=./telephone.mdb;PersistSecurityInfo=False");SqlConnectionconn=newSqlConnection(str);
SqlDataAdapterda=newSqlDataAdapter();
15、ASP.NET有哪些內(nèi)置對象?ASP.NET中有哪些驗證控件?Global.asax文件的功能?
16、.NETFramework有哪些數(shù)據(jù)提供程序?各自位于哪個命名空間?17、ADO.NET使用System.Data.SqlClient命名空間的類訪問SQLServer數(shù)據(jù)庫中的數(shù)據(jù);使用System.Data.OleDb訪問Access數(shù)據(jù)庫中的數(shù)據(jù)。。。18、連接字符串的設(shè)置、數(shù)據(jù)庫連接組件的用法、19、OleDbCommand控件的使用
20、有幾種方法可以實現(xiàn)頁面跳轉(zhuǎn)?
21、.aspx中主要控件
包括:TextBox控件、下拉列表框(DropDownList)、驗證控件、Button控件、RangeValidator、GridView、DataSet控件
22、VisualStudio.NET的窗口解決方案資源管理器、類視圖、資源視圖、屬性可以查看哪些內(nèi)容?23、關(guān)鍵字
interface從派生類中訪問基類的成員,可以使用base關(guān)鍵字、this關(guān)鍵字、overrideg、using關(guān)鍵字作用
調(diào)用被隱藏的基類的成員,必須要使用base關(guān)鍵字。若訪問被繼承但是沒有被簽名相同的派生類成員隱藏的基類成員,則不必使用base關(guān)鍵字,因為它們在派生類中仍然是唯一的。
24、Web.config文件的功能
Web站點的配置,可以直接在Internet服務(wù)管理器(IIS)上進行,使用也比較方便,但是這種方法有一個缺點:擴展性和靈活性較差。為了提高擴展性和靈活性,ASP.NET專門設(shè)置一個Web.config文件來保存配置信息。與Global.asax文件不同,Web.config不一定要放在Web應(yīng)用程序的根目錄下。同一個Web應(yīng)用程序下的所有子目錄都可以擁有自己的Web.config文件。此時IIS會先繼承根目錄下的配置設(shè)置,如果遇到相同的配置標記,則現(xiàn)行目錄下的Web.config配置將覆蓋根目錄下同名的配置設(shè)置。
1)配置與調(diào)用數(shù)據(jù)庫鏈接字符串
在Web.config文件中可以使用配置節(jié)來配置應(yīng)用程序的配置數(shù)據(jù)庫鏈接字符串。在配置數(shù)據(jù)庫鏈接字符串時,使用方式,并設(shè)置兩個鍵/值對,鍵的名稱為name和connectionString。配置數(shù)據(jù)庫鏈接字符串的程序代碼如下:
采用下面方式可以讀取此種設(shè)置方式:
stringsqldb=ConfigurationManager.ConnectionStrings["Sqlserver"].ConnectionString;
也可以在與之間設(shè)置數(shù)據(jù)庫的鏈接字符串。代碼如下:
"RemoteOnly"只對不在本地Web服務(wù)器上運行的
用戶顯示自定義(友好的)信息。出于安全目的,建議使用此設(shè)置,以便不向遠程客戶端顯示應(yīng)用程序的詳細信息。-->配置節(jié)
配置節(jié)可以用來配置應(yīng)用程序級別跟蹤,為應(yīng)用程序中的每一頁啟用跟蹤日志輸出。配置節(jié)的一種配置的程序代碼如下:
配置節(jié)
配置節(jié)用來配置應(yīng)用程序的身份驗證策略,主要包括有Windows、Form、Passport和None。配置節(jié)的一種配置的程序代碼如下:
25、數(shù)據(jù)庫中表的增加、查找、修改和刪除。
26、驗證控件
ASP.NET驗證控件控件名功能RangeValidatorRegularExpressionValidatorRequiredFieldValidatorValidationSummaryCustomValidatorCompareValidator檢查用戶的輸入是否在一個特定的范圍內(nèi)檢查用戶的輸入是否與正則表達式所定義的模式一致檢查用戶是否在輸入控件中輸入了數(shù)據(jù)顯示頁面上所有驗證控件所搜索到的驗證錯誤通過用戶自定義函數(shù)判定輸入的數(shù)據(jù)是否有效將輸入控件的值同常數(shù)值或其它輸入控件的值相比較,以確定兩個值是否與由比較運算符(>、=、Global.asax文件,正如在第九章中已經(jīng)介紹到的,Global.asax文件必須存放在Web主目錄中,當瀏覽器與Web服務(wù)器連接時,會先去檢查Web主目錄有沒有Global.asax文件,若有,就先去執(zhí)行該文件。在Global.asax文件中有一些特定的事件很有用,下面按事件觸發(fā)順序給出幾個常用的事件:
1)、Application_Start事件
第一個用戶首次請求頁面時觸發(fā)。
2)、Session_Start事件
每個用戶首次請求頁面時觸發(fā)。
3)、Session_End事件
在關(guān)閉應(yīng)用程序或每個用戶在規(guī)定時間內(nèi)沒有提出請求時觸發(fā)。
4)、Application_End事件
在關(guān)閉應(yīng)用程序或最后一個用戶在規(guī)定時間內(nèi)沒有提出請求時觸發(fā)。
一般情況下,可以在Application_Start事件中定義并初始化公用變量,以便所有請求頁面的用戶都能共享這些變量。由于每個用戶都有自己的Session,所以可以在Session_Start事件中為客戶設(shè)置初始化信息。
29、簡單數(shù)據(jù)綁定和復(fù)雜數(shù)據(jù)綁定30、單值綁定和多值綁定
1、單值綁定
單值綁定是指將一個數(shù)據(jù)綁定到一個單值控件上,單值控件一次顯示一個數(shù)據(jù)。大多數(shù)Web服務(wù)器控件和HTML控件都是單值控件,如TextBox、Label、Input(Text)控件。其實,所有的控件都允許把數(shù)據(jù)賦予它的某個屬性,以完成單值綁定。例如,在實際應(yīng)用中,可以使用ADO.NET技術(shù)從數(shù)據(jù)庫中獲得某個數(shù)據(jù),然后將其賦予Label的Text屬性或ListBox的BackColor屬性等,就完成了單值綁定。
2、多值綁定
多值綁定是指將一組數(shù)據(jù)綁定到多值控件上,多值控件可以同時顯示一個或多個數(shù)據(jù)記錄,如Web服務(wù)器控件的ListBox、RadioButtonList、CheckBoxList等。在Web應(yīng)用中,.NET提供了多值數(shù)據(jù)綁定控件又可以分為:列表控件和復(fù)合綁定控件。列表控件有:DropDownList、ListBox、RadioButtonList和CheckBoxList控件等;復(fù)合綁定控件有Repeater、DataList、以及由DataGrid控件改進的GridView控件。
另外,根據(jù)綁定數(shù)據(jù)的時間不同,.NET的數(shù)據(jù)綁定技術(shù)還可以分為以下兩種:1)、在設(shè)計時綁定:在設(shè)計系統(tǒng)時指定綁定控件的數(shù)據(jù)源。
2)、在運行時綁定:用編程的方式,在系統(tǒng)運行時指定綁定控件的數(shù)據(jù)源。
31、Web服務(wù)器控件
屬于System.Web.UI.WebControls命名空間,大多數(shù)Web服務(wù)器控件類是從該命名空間的基類WebControl直接或間接派生的。32、GridView控件
GridView控件是ASP.NET2.0新增加的控件,是最常用的數(shù)據(jù)綁定控件,用于以表格形式在頁面上顯示數(shù)據(jù)。
.1GridView控件概述
GridView控件是一個網(wǎng)格狀的數(shù)據(jù)綁定控件,用于以表格的形式來顯示、編輯和刪除多種不同數(shù)據(jù)源(數(shù)據(jù)庫、XML文件等)中的數(shù)據(jù)。以表格顯示數(shù)據(jù)源的值,表中每列表示一個字段,而每行表示一條記錄。GridView控件具有如下功能:
1)、通過數(shù)據(jù)源控件自動綁定和顯示數(shù)據(jù)。2)、內(nèi)置排序、更新和刪除功能。3)、內(nèi)置分頁、行選擇功能。
4)、可通過主題和樣式進行自定義外觀。
添加GridView控件,可以在頁面的HTML視圖中通過添加代碼實現(xiàn)。例如,要添加ID為“GridView1”的控件,代碼如下:
或在設(shè)計視圖中直接拖拽工具箱中的GridView控件圖標來添加。添加后的控件如圖10.5所示。
圖10.5GridView控件設(shè)計視圖
.2常用屬性、方法和事件
1、常用屬性
GridView控件功能很強大,常用的屬性有:
AllowSorting屬性:獲取或設(shè)置一個值,該值指示是否啟用排序。
AutoGenerateColumns屬性:獲取或設(shè)置一個值,該值指示是否為數(shù)據(jù)源中的每個字段自動創(chuàng)建綁定字段。
Columns屬性:獲取表示GridView控件中列字段的DataControlField對象的集合。CssClass屬性:獲取或設(shè)置由Web服務(wù)器控件在客戶端呈現(xiàn)的級聯(lián)樣式表(CSS)類。
DataMember屬性:當數(shù)據(jù)源包含多個不同的數(shù)據(jù)項列表時,獲取或設(shè)置數(shù)據(jù)綁定控件綁定到的數(shù)據(jù)列表的名稱。
DataSource屬性:獲取或設(shè)置對象,數(shù)據(jù)綁定控件從該對象中檢索其數(shù)據(jù)項列表。DataSourceID屬性:獲取或設(shè)置控件的ID,數(shù)據(jù)綁定控件從該控件中檢索其數(shù)據(jù)項列表。EditIndex屬性:獲取后設(shè)置要編輯的行的索引。
EditRowStyle屬性:獲取對TableItemStyle對象的引用,使用該對象可以設(shè)置GridView控件中為進行編輯而選中的行的外觀。
Page屬性:獲取對包含服務(wù)器控件的Page實例的引用。
Rows屬性:獲取表示GridView控件中數(shù)據(jù)行的GridViewRow對象的集合。SelectedIndex屬性:獲取或設(shè)置GridView控件中的選中行的索引。
ShowFooter屬性:獲取或設(shè)置一個值,該值指示是否在GridView控件中顯示腳注行。
ShowHeader屬性:獲取或設(shè)置一個值,該值指示是否在GridView控件中顯示標題行。
SortDirection屬性:獲取正在排序的列的排序方向。
SortExpression屬性:獲取與正在排序的列關(guān)聯(lián)的排序表達式。2、常用方法
GridView控件常用方法有:
DataBind()方法:將數(shù)據(jù)源綁定到GridView控件。
DeleteRow()方法:從數(shù)據(jù)源中刪除位于指定索引位置的記錄。FindControl()方法:在當前的命名容器中搜索指定的服務(wù)器控件。
Sort()方法:根據(jù)指定的排序表達式和方向?qū)ridView控件進行排序。UpdateRow()方法:使用行的字段值更新位于指定行索引位置的記錄。3、常用事件
GridView控件提供在導(dǎo)航或編輯操作之前和之后發(fā)生的事件,而在每次發(fā)生事件時都可以運行一個自定義程序。GridView控件常用的事件有:
PageIndexChanged事件:在單擊某一頁導(dǎo)航按鈕時,但在GridView控件處理分頁操作之后發(fā)生。
PageIndexChanging事件:在單擊某一頁導(dǎo)航按鈕時,但在GridView控件處理分頁操作之前發(fā)生。
RowCancelingEdit事件:單擊編輯模式中某一行的“取消”按鈕以后,在該行退出編輯模式之前發(fā)生。
RowCommand事件:當單擊GridView控件中的按鈕時發(fā)生。RowCreated事件:在GridView控件中創(chuàng)建行時發(fā)生。
RowDataBound事件:在GridView控件中將數(shù)據(jù)行綁定到數(shù)據(jù)時發(fā)生。
RowDeleted事件:在單擊某一行的“刪除”按鈕時,但在GridView控件刪除該行之后發(fā)生。此事件常用于檢查刪除操作的結(jié)果。
RowDeleting事件:在單擊某一行的“刪除”按鈕時,但在GridView控件刪除該行之前發(fā)生。此事件常用于取消刪除操作。
RowEditing事件:發(fā)生在單擊某一行的“編輯”按鈕以后,GridView控件進入編輯模式之前。此事件通常用于取消編輯操作。
RowUpdated事件:發(fā)生在單擊某一行的“更新”按鈕,并且GridView控件對該行進行更新之后。此事件通常用于檢查更新操作的結(jié)果。
RowUpdating事件:發(fā)生在單擊某一行的“更新”按鈕以后,GridView控件對該行進行更新之前。此事件通常用于取消更新操作。
SelectedIndexChanged事件:發(fā)生在單擊某一行的“選擇”按鈕,GirdView控件對相應(yīng)的選擇操作進行處理之后。此事件常用于在該控件中選定某行之后執(zhí)行某項任務(wù)。SelectedIndexChanging事件:發(fā)生在單擊某一行的“選擇”按鈕以后,GirdView控件對相應(yīng)的選擇操作進行處理之前。此事件常用于取消選擇操作。
Sorted事件:在單擊用于列排序的超鏈接時,但在GridView控件對相應(yīng)的排序操作進行處理之后發(fā)生。此事件常用于在用戶單擊用于列排序的超鏈接之后執(zhí)行某個任務(wù)。
Sorting事件:在單擊用于列排序的超鏈接時,但在GridView控件相對的排序操作進行處理之前發(fā)生。此事件常用于取消排序操作或執(zhí)行自定義的排序程序。
.3GridView中的字段類型
GridView控件中的每一列由一個DataControlField對象表示。默認情況下,AutoGenerateColumns屬性被設(shè)置為true,為數(shù)據(jù)源中的每一個字段創(chuàng)建一個AutoGeneratedField對象。然后每個字段作為GridView控件中的列呈現(xiàn)出來,其順序和每個字段在數(shù)據(jù)源中的順序相同。
將AutoGenerateColumns屬性設(shè)置為false,然后可以自己定義列字段集合,也可以手動控制哪些字段將顯示在GridView控件中。列字段集合可以用聲明方式定義,需要在GridView控件的開始和結(jié)束標記之間添加標記。然后在此標記之間列出想要包含在內(nèi)的列字段,這些包含在內(nèi)的列將以所列出的順序添加到Columns集合中。Columns集合存儲該控件中的所有列字段,并可以以編程方式管理GridView控件中的列字段。
不同的列字段類型決定控件中各列的行為。下面給出可以使用的不同列字段類型:BoundField:顯示數(shù)據(jù)源中某個字段的值,是GridView控件的默認列類型。
ButtonField:為GridView控件中的每一項顯示一個命令按鈕,即整列由按鈕組成,可以是Button、ImageButton或LinkBotton。
CheckBoxField:為GridView控件中的每一項顯示一個復(fù)選框。這種列字段類型常用于顯示布爾值類型的字段。
CommandField:在GridView控件中顯示用于執(zhí)行選擇、編輯、插入或刪除操作的命令按鈕。這些命令按鈕不需要編寫任何代碼就可以實現(xiàn)相應(yīng)的操作。
HyperLinkField:將數(shù)據(jù)源中的某個字段的值在GridView控件中顯示為超鏈接。ImageField:為GridView控件中的每一項顯示一個圖像。
TemplateField:根據(jù)指定的模板為GridView控件中的每一項顯示用戶定義的內(nèi)容。常用于顯示控件。
.4GridView數(shù)據(jù)顯示
GridView控件可綁定到數(shù)據(jù)源控件以及實現(xiàn)了System.Collections.IEnumerable接口的任何數(shù)據(jù),如System.Data.DataView、System.Collections.ArrayList、System.Collections.Hashtable等。顯示這些數(shù)據(jù)分為兩種情況:自動顯示數(shù)據(jù)和定制顯示數(shù)據(jù)。
1、自動顯示數(shù)據(jù)
若要綁定到某個數(shù)據(jù)源,將GridView控件的DataSourceID屬性設(shè)置為該數(shù)據(jù)源控件的ID值。GridView控件自動綁定到指定的數(shù)據(jù)源控件,還可以非常簡單地進行數(shù)據(jù)的顯示。較常用的數(shù)據(jù)源是SqlDataSource。下面通過一個實例:介紹自動顯示數(shù)據(jù)的過程。將數(shù)據(jù)表StudentInfo中的數(shù)據(jù)通過SqlDataSource數(shù)據(jù)源自動顯示在GridView中。
1)、新建項目,在項目中創(chuàng)建GVexample.aspx頁面。2)、在頁面上添加一個GridView控件,在本例中保留的默認設(shè)置。3)、通過SqlDataSource創(chuàng)建一個訪問關(guān)系數(shù)據(jù)庫的控件。
4)、將GridView的DataSourceID設(shè)置為SqlDataSource對象的ID。設(shè)置完后的頁面如圖所示。
GridView自動顯示數(shù)據(jù)界面
對應(yīng)GVexample.aspx頁面的HTML代碼如下:htmlxmlns="">
GridView實例
此實例不需要編寫任何代碼,直接編譯運行,運行結(jié)果如圖10.7所示。
圖10.7GridView自動顯示數(shù)據(jù)運行結(jié)果
為了使GridView的外觀更加美觀,可以設(shè)置以下屬性:
AlternatingRowStyle屬性:GridView控件中的交替數(shù)據(jù)行的樣式設(shè)置。當設(shè)置了此屬性后,數(shù)據(jù)行交替使用RowStyle設(shè)置和AlternatingRowStyle設(shè)置進行顯示。EditRowStyle屬性:GridView控件中正在編輯的行的樣式設(shè)置。
EmptyDataRowStyle屬性:當數(shù)據(jù)源不包含任何記錄時,GridView控件中顯示空數(shù)據(jù)行的樣式設(shè)置。
FooterStyle屬性:腳注行的樣式設(shè)置。HeaderStyle屬性:標題行的樣式設(shè)置。PagerStyle屬性:頁導(dǎo)航行的樣式設(shè)置。RowStyle屬性:數(shù)據(jù)行的樣式設(shè)置。
SelectedRowStyle屬性:選中行的樣式設(shè)置。
在IDE環(huán)境中,可以方便地在屬性窗口中設(shè)置這些屬性。此外,GridView控件內(nèi)置了一個GridView任務(wù)設(shè)計器,通過其中的“自動套用格式”超級鏈接,可以自動套用.NET內(nèi)置的一些常見的格式。
2、定制顯示數(shù)據(jù)
在例10-4中,GridView控件的AutoGenerateColumns屬性保持的默認值:true,這為數(shù)據(jù)源中的每一列自動創(chuàng)建一個BoundField列,其標頭為該列在數(shù)據(jù)源中的列名,數(shù)據(jù)按在數(shù)據(jù)源中的順序全部顯示出來。在有些情況下,不需要這樣顯示。如,想要改變列的先后順序或改變GridView中顯示的標頭,或顯示數(shù)據(jù)源中部分字段的值。上述情況,就需要定制顯示數(shù)據(jù)。若要定制顯示數(shù)據(jù),首先要設(shè)置AutoGenerateColumns屬性為false,即不能讓GridView自動產(chǎn)生列,而是通過編輯Columns屬性設(shè)置各個列的定義。
下面通過實例:例10-5來介紹定制顯示數(shù)據(jù)方式。在例10-5中,有兩個頁面Show.aspx和Display.aspx頁。在Show.aspx頁中添加一個GridView控件,在此控件中只顯示表StudentInfo表中的學號、姓名和班級,并將班級顯示為超鏈接的列,單擊超鏈接跳轉(zhuǎn)到Display頁面。
例10-1)、新建項目
新建項目,在項目中加入Show.aspx和Display.aspx頁。在Show.aspx頁中加入一個GridView控件,設(shè)置其AutoGenerateColumns屬性為false,然后,編輯Columns屬性設(shè)置各個列的定義。Display.aspx頁不需要做任何設(shè)置,創(chuàng)建完后的項目如圖10.8所示。
圖10.8GridView定制顯示數(shù)據(jù)界面
對應(yīng)的Show.aspx頁的HTML代碼如下:
這里,語句實現(xiàn)添加標題為“編號”的列,而該列要顯示的數(shù)據(jù)由屬性DataField決定,當賦值為StudentID,表示可以顯示數(shù)據(jù)源中的字段“StudentID”。在Columns定義的最后,添加了超鏈接列:HyperLinkField。下面給出HyperLinkField的屬性:
DataNavigateUrlFields屬性:獲取或設(shè)置數(shù)據(jù)源中字段的名稱,用于為HyperLinkField對象中的超鏈接構(gòu)造URL。
DataNavigateUrlFormatString屬性:獲取或設(shè)置用于指定格式的字符串,HyperLinkField對象中的超鏈接的URL將以此格式呈現(xiàn)。
DataTextField屬性:獲取或設(shè)置數(shù)據(jù)源中的字段的名稱,此名稱包含要為HyperLinkField對象中的超鏈接標題顯示的文本。
DataTextFormatString屬性:獲取或設(shè)置用于指定格式的字符串,HyperLinkField對象中的超鏈接標題將以此格式顯示。Text屬性:超鏈接列中顯示的文本。
NavigateUrl屬性:當單擊列中的超級鏈接時鏈接到的URL。在本例中,設(shè)置了如下屬性:DataNavigateUrlFields="StudentID"
DataNavigateUrlFormatString="Display.aspx?id={0}"DataTextField="StudentID"
DataTextFormatString="#{0}>>"NavigateUrl="~/Display.aspx"這里,"Display.aspx?id={0}"中的“{0}”表示要傳遞的數(shù)據(jù)字段對應(yīng)單擊行的數(shù)據(jù)本身。2)、編輯代碼
因為,沒有指定GridView的數(shù)據(jù)源,因此需要編輯代碼使用DataBind方法將數(shù)據(jù)源綁定到GridView中。雙擊Show.aspx的設(shè)計頁面,進入編輯頁面,輸入如下代碼:protectedvoidPage_Load(objectsender,EventArgse){
//連接數(shù)據(jù)庫
SqlConnectionconn=newSqlConnection();
conn.ConnectionString="Server=localhost;Database=Student;UserID=sa;PWD=sa";
//使用SqlCommand提交查詢命令
SqlCommandselcomm=newSqlCommand("select*fromStudentInfo",conn);try{
conn.Open();//打開連接//獲取數(shù)據(jù)適配器
SqlDataAdapterda=newSqlDataAdapter();da.SelectCommand=selcomm;DataSetds=newDataSet();da.Fill(ds,"STable");
GridView1.DataSource=ds;GridView1.DataBind();}
catch(Exceptionex){
Response.Write(ex.Message);}finally{
conn.Close();//關(guān)閉連接}}
然后在編輯Display.aspx頁的代碼,代碼如下:protectedvoidPage_Load(objectsender,EventArgse){
//得到傳遞的參數(shù)
stringSID=Page.Request.QueryString["id"];//連接數(shù)據(jù)庫
SqlConnectionconn=newSqlConnection();
conn.ConnectionString="Server=localhost;Database=Student;UserID=sa;PWD=sa";
//使用SqlCommand提交查詢命令
SqlCommandselcomm=newSqlCommand("select*fromStudentInfowhereStudentID="+SID+"",conn);try{
conn.Open();//打開連接//創(chuàng)建SqlDataReader
SqlDataReaderdr=selcomm.ExecuteReader();if(dr.Read()){
Response.Write("學號:"+dr["XueHao"]+"");Response.Write("姓名:"+dr["SName"]+"");Response.Write("班級:"+dr["Class"]+"");}}
catch(Exceptionex){
Response.Write(ex.Message);}
finally{
conn.Close();//關(guān)閉連接}
}3)、編譯運行
運行Table.aspx頁面,得到的運行結(jié)果如圖10.9所示。
圖10.9GridView定制顯示數(shù)據(jù)結(jié)果
從圖10.9可見,GridView控件中并沒有把StudentInfo表中的所有列數(shù)據(jù)顯示出來,而是只顯示出要求顯示的列:編號、學號、姓名和班級,并把最后一列設(shè)為超級鏈接列。單擊任何一行的超級鏈接,都將跳轉(zhuǎn)到Display.aspx頁,并在Display.aspx頁中顯示對應(yīng)的學生信息。若單擊第二行的超鏈接,運行結(jié)果如圖10.10所示。
圖10.10超鏈接頁面運行結(jié)果
10.3.5編輯和刪除數(shù)據(jù)
GridView控件具有一些內(nèi)置功能,允許用戶不需要編程就可以編輯或刪除記錄。使用內(nèi)置編輯或刪除功能的步驟如下:
1)、為GridView添加需要的修改、刪除、選擇列。為GirdView控件添加這些列很簡單,在屬性窗口中,將AutoGenerateDeleteButton屬性、AutoGenerateEditButton屬性和AutoGenerateSelectButton屬性的值設(shè)置為True,就可以把這些行添加上。在例10-4的基礎(chǔ)上,添加這些列后的GridView外觀如圖10.11所示。
圖10.11添加編輯、刪除、選擇列的GridView界面
2)、配置數(shù)據(jù)源。
這里采用的是SqlDataSource數(shù)據(jù)源,若想通過GridView控件內(nèi)置功能實現(xiàn)刪除、修改數(shù)據(jù)等操作,需要在對SqlDataSource數(shù)據(jù)源配置時,單擊“高級”按鈕,在彈出的對話框中選中“生成INSERT,UPDATE,DELETE語句”,而且,在選擇數(shù)據(jù)時,一低要把主鍵字段選上。
然后,運行頁面就可以直接實現(xiàn)編輯、刪除的功能了。運行頁面,單擊第一行的編輯按鈕,頁面如圖10.12所示。
圖10.12處于編輯狀態(tài)的GridView數(shù)據(jù)行
當然也可以使用事件和模板來自定義GridView控件的編輯或刪除功能,這里不再詳細描述,在具體應(yīng)用中,可視情況選擇使用。
10.3.6分頁顯示數(shù)據(jù)和數(shù)據(jù)排序
如果顯示數(shù)據(jù)太多,GridView控件可以分頁進行顯示,與這個功能相關(guān)的屬性有:AllowPaging屬性:獲取或設(shè)置一個值,該值指示是否啟動分頁。
PageCount屬性:獲取在GridView控件中顯示數(shù)據(jù)源記錄所需的頁數(shù)。PageIndex屬性:獲取或設(shè)置當前顯示頁的索引。
PageSize屬性:獲取或設(shè)置GridView控件在每頁上所顯示的記錄的數(shù)目。
要想在GridView中實現(xiàn)分頁,可以將AllowPaging屬性設(shè)置為True,再設(shè)置PageSize為一個值,便設(shè)定了在每頁上所顯示的記錄行數(shù)。若要根據(jù)GridView的某一列對數(shù)據(jù)進行排序,則將AllowSorting屬性設(shè)置為True,便可進行排序。
33、34、textBox1.Text被賦值為12,textBox2.Text被賦值為45,label1.Text=textBox1.Text+textBox2.Text;得到是字符串還是數(shù)值。35、i+=j;的等效語句是i=j+j嗎?36、Main函數(shù)是唯一允許的全局函數(shù)37、C#中一條語句必須寫在一行內(nèi);
拋出異常
拋出異常有兩種方式。如果是系統(tǒng)自動生成異常類對象,則不需要編寫任何代碼。如,在進行整數(shù)除法運行時,當分母為零時,就會自動產(chǎn)生一個System.DivideByZeroException類的對象。如果是強制拋出,則使用throw語句來實現(xiàn),throw語句用于立即無條件地引發(fā)異常,控制永遠不會執(zhí)行緊跟在throw后面的語句。
Throw語句的形式:Throw[異常對象];
下面給出使用throw語句如何強制拋出異常,如例5-11所示。例5-11
usingSystem;
publicclassThrowTest{
staticvoidMain(){
strings;
Console.WriteLine("請輸入字符串:");s=Console.ReadLine();if(s=="C#"){
thrownewArgumentNullException();}
Console.Write("Thestringsisnull");//不會執(zhí)行
}}運行結(jié)果:
在例5-11中,當輸入字符串“C#”后,賦值給s。這本來是正確的輸入,然而由于強制拋出“參數(shù)為空”的異常,因此輸出上面的結(jié)果。而throw后面的Console.Write("Thestringsisnull")語句不會得到執(zhí)行。
捕獲處理異常
異常處理由try語句處理,try語句提供了一種機制來捕捉塊執(zhí)行過程中發(fā)生的異常,它有三中形式:
try-catch:可有一個或多個catch塊語句的try塊語句。try-finally:跟有一個finally塊語句的try塊語句。
try-catch-finally:跟有一個或多個catch塊語句和一個finally語句的try塊語句。catch用于處理語句塊中出現(xiàn)的異常,catch的格式是:catch(class-type標識符)
catch語句的參數(shù)是一個類類型,此類必須是System.Exception或者是它的派生類的類型。當一個catch語句同時指定了類類型和標識符時,就聲明了一個同名同類型的異常變量。異常變量相當于一個只讀的局部變量,它的有效區(qū)間是catch塊語句內(nèi)部。在catch塊語句執(zhí)行過程中,異常變量代表當前正被處理的異常。異常對象中有很多重要的錯誤信息,若想引用異常對象,就必須定義異常變量。
下面分別介紹try語句的三種形式。1、try-catch
try-catch語句是可有一個或多個catch塊語句的try塊語句,一般格式如下:try
{;//可能引發(fā)異常的語句}catch(異常對象聲明1)
{;//異常處理,異常信息等};
catch(異常對象聲明n)
{;//異常處理,異常信息等}
在同一個try-catch語句中可以有多個catch子句,如果某一catch語句指定的類型和它之前的catch語句指定的類型一致或者由此類型派生而來,會發(fā)生錯誤,因此尋找異常的處理是按照catch子句出現(xiàn)的順序逐一檢查。在catch語句中,異常對象聲明是可選的,如果catch子句使用時不帶任何參數(shù),它可以捕捉任何類型的異常,這樣的catch語句稱為通用catch語句,等同于catch(System.Exception)。Try語句中只能存在一條通用catch語句,而且必須是try語句的最后一條catch語句。
下面給出實例:例5-12,來介紹try-catch語句的使用。例5-12
usingSystem;
publicclasstrycatchTest{
staticvoidMain(){
try{
intx,y,z;
Console.WriteLine("請輸入兩個數(shù)據(jù)分別賦值給x和y:");x=int.Parse(Console.ReadLine());y=int.Parse(Console.ReadLine());z=x/y;
Console.WriteLine("z={0}",z);}
catch(FormatExceptionae){
Console.WriteLine(ae.ToString());}
catch(DivideByZeroExceptionbe){
Console.WriteLine(be.ToString());}
catch(Exceptionce){
Console.WriteLine(ce.ToString());}}}
運行結(jié)果:
上面的結(jié)果是,首先輸入數(shù)字10,然后回車輸入5,得到正確的運算結(jié)果。
如果,在輸入x和y值時,輸入10后,按空格再輸入5,則引發(fā)FormatException異常,出現(xiàn)下面的提示:
如果首先輸入數(shù)字時,然后回車輸入數(shù)字0,引發(fā)了DivideByZeroException異常,如下所示:
若將上例中的第二個catch語句和第三個交換位置,編譯時會出現(xiàn)如下錯誤。
2、try-finally
Finally塊用于清除在try塊中分配的任何資源。無論是程序正常執(zhí)行或是執(zhí)行了break,continue或goto語句,還是把異常處理傳遞到try塊語句之外,都必須執(zhí)行finally塊中的語句。Finally塊語句中不允許出現(xiàn)return語句。
這種語句的形式如下:try{;//可能引發(fā)異常的語句}finally
{;//包含異常處理程序和清理代碼}
若將上面例5-12中的catch塊語句全部去掉,然后在try塊語句下面輸入如下語句:finally{
Console.WriteLine("thankyou!");
}運行程序,輸入數(shù)字10,然后回車輸入0,會輸出如下結(jié)果:
從結(jié)果中可見,運行后引發(fā)了DivideByZeroException異常,盡管捕捉了異常,仍然會執(zhí)行包含在finally塊中的輸出語句,即Console.WriteLine("thankyou!")語句。
3、try-catch-finally
try-catch-finally語句可以看成是try-catch和try-finally語句的組合,格式如下:try
{;//可能引發(fā)異常的語句}catch(異常對象聲明1)
{;//異常處理,異常信息等};
catch(異常對象聲明n)
{;//異常處理,異常信息等}finally
{;//包含異常處理程序和清理代碼}
try-catch-finally語句的通常用法是在try塊中獲取并使用資源,在catch塊中處理異常情況,在finally塊中釋放資源。
下面,在例5-12中,在catch塊語句后加入如下語句:finally{
Console.WriteLine("thankyou!");}
運行程序,輸入數(shù)字10,然后回車輸入0,會輸出如下結(jié)果:
從結(jié)果中可以看到,在catch塊語句中處理了引發(fā)的DivideByZeroException異常,并且執(zhí)行了finally塊中的輸出語句。除了使用預(yù)定義的異常類型外,用戶還可以自定義異常類,以滿足自己的具體需要。用戶自定義異常類,一般從ApplicationException類派生,因為該類由用戶程序引發(fā),而不是公共語言運行庫引發(fā)。
友情提示:本文中關(guān)于《基于.NET的Web程序設(shè)計知識點總結(jié)》給出的范例僅供您參考拓展思維使用,基于.NET的Web程序設(shè)計知識點總結(jié):該篇文章建議您自主創(chuàng)作。
來源:網(wǎng)絡(luò)整理 免責聲明:本文僅限學習分享,如產(chǎn)生版權(quán)問題,請聯(lián)系我們及時刪除。