您好,登錄后才能下訂單哦!
這篇文章為大家帶來有關C#中的概念詳細介紹。大部分知識點都是大家經常用到的,為此分享給大家做個參考。一起跟隨小編過來看看吧。
1.什么是.Net
.Net是由Microsoft推出的應用程序開發平臺,可用來構建和運行新一代Microsoft Windows和Web應用程序。
2. .Net的核心技術
.Net Framework:.Net 平臺核心中的核心,為.Net 平臺下的應用程序的運行提供基本框架。
.Net企業服務器:微軟為企業提供技術服務的一部分,包括各種開發工具包。
構建模塊服務:微軟提供的COM+組件服務和XML Web服務技術,利用構建模塊服務開發應用程序模塊,可以迅速地組裝一個功能完備的軟件。
Visual Studio.Net : .Net 平臺的主要開發工具
3..Net Framework由不同組件組成,用于支持創建和運行基于.NET平臺的應用程序。
4..Net Framework框架的底層是Windows操作系統提供的各種應用程序服務組件,這些組件包括:消息隊列服務、COM+組件服務、Internet信息服務(IIS)、Windows管理工具(WMI)等。
5..Net Framework可以與他們整合以開發應用程序,在.Net Framework最頂層是程序設計語言, .Net Framework支持20多種計算機程序設計語言。在Visual Studio.Net 開發環境中,可以直接使用VB、C#、C++、J#、Jscript這5種語言開發任何應用程序。
6..Net Framework具有兩個主要組件:公共語言運行時(CLR)和.Net Framework類庫,除此之外還有ADO.NET、ASP.NET、XML Web等。
7..Net Framework支持3種類型的用戶界面:
命令控制臺,用來設計純字符界面的應用程序
Windows窗體,用來設計Windows界面的應用程序
Web窗體,用來設計Web界面的應用程序
8.ADO.NET是.Net Framework提供的微軟新一代的面向對象的數據處理技術,利用它可以簡便、快捷地開發數據庫應用程序。
ASP.Net是.Net Framework提供的全新的Web應用程序開發技術,利用ASP.NET開發WEB應用程序如同開發Windows應用程序一樣簡單。
Xml Web Service是一種能夠在Internet環境中直接調用的組件。.Net Framework提供了創建、測試和部署XML Web服務的工具和類。
9.Net Framework為應用程序開發者提供了一個與平臺無關
的開發環境,使用.Net Framework開發程序有以下優點:
1. 基于Web的標準
.Net Framework完全支持現有的Internet技術和其他Web標準。
2. 使用統一的應用程序模型
任何與.NET兼容的語言都可以使用.Net Framework類庫。
3. 易于開發人員使用
當開發人員需要調用.Net Framework類庫的類時,只要將該類屬性命名空間添加到引用解決方案中即可。
4. 可擴展類
.Net Framework提供了通用類型系統,開發人員可以通過繼承來訪問類庫中的類,也可以擴展類庫中的類,甚至于構建自己的類庫。
C#的優勢:(1) C# 是一種精確、簡單、類型安全、面向對象的語言。
(2) C#具有生成持久系統級組件的能力。
(3) C# 利用.Net Framework的通用類型系統能夠與其他程序設計語言交互操作。
(4) C#支持MSMQ(微軟消息隊列)服務、COM+組件服務、XML Web服務和.Net Framework 。
(5) C#允許自定義數據類型、以擴展的元數據。
(6) C#增強了開發效率,同時也保持了開發者所需要的靈活性。
C#程序的特點:4. C#程序中的方法的結構
C#程序中的一個方法由兩部分組成:方法頭部和方法體。
方法頭部:方法的頭部即方法的第1行,包括返回值類型、方法名、形參名及形參類型的說明。
方法體:方法體使用一對大括號“{ }”括起來,通常包含聲明語句和執行語句。
5. C#程序的語句
C#程序中的每個語句必須以分號結尾,在書寫時,可以一行書寫幾條語句,也可以將一條語句分寫在幾行上。
6. C#程序的輸入與輸出操作
C#語言自身沒有輸入、輸出語句,因此C#控制臺應用程序必須借助類庫中的Console類的方法(ReadLine、WriteLine等)來完成輸入、輸出等操作,而C# Windows應用程序和Web應用程序必須借助類庫的控件類(如標簽、文本框等)來實現輸入、輸出。
7. C#程序的注釋
可以用“//”或“/*……*/”添加注釋。適當的添加注釋,可以大大增強程序的可讀性。
簡單類型表示一個有唯一取值的數據類型,包括以下4種
類型:1. 整數型2. 浮點型3. 小數型4. 布爾型
float型:取值范圍在±1.5e?45 到 ±3.4e38精度為7位
double型:取值范圍在±5.0e?324 到 ±1.7e308精度為15到16位
3. 小數型decimal 為滿足高精度的財務和金融計算領域的需要,C#提供小數型數據類型
取值范圍在±1.0?×?10e?28 至 ±7.9?×?10e28精度為28到29位
4. 布爾型(bool)用來表示邏輯真或邏輯假只有兩種取值:true(真)或false (假)
5.程序運行過程中,其值始終不變的量稱為常量
1, 整型常量
整形常量分有符號的整型常量、無符號的整型常量和長整型常量
有符號的整型常量直接書寫,如5
無符號整型常量在書寫時添加u或U標志,如5U
長整型常量在書寫時添加l或L標記,如5L
2. 浮點型常量
浮點型常量分單精度浮點型常量和雙精度浮點型常量
單精度浮點型常量在書寫時添加f或F標記,如5F
雙精度型常量添加d或D標記,如5D
以小數形式直接書寫時,自動被解釋成雙精度浮點型常量,如5.0即為雙精度浮點型常量。
3. 小數型常量
小數型常量的后面必須添加m或M標記,否則就會被解釋成浮點型數據。
4. 字符型常量 (Unicode字符):
字符型常量使用兩個單引號來標記 ,例如’5’、 ’A’、 ’中’、 ’@’
C#的轉義字符常量以反斜杠’\’開頭,用來表示控制及不可見的字符,如’\b’表示倒退一個字符。詳見教材P26表2-3
5. 布爾型常量
只有兩個, true 表示邏輯真,false表示邏輯假。
6. 字符串常量
字符串常量表示若干個Unicode字符組成的字符序列,使用雙引號來標記,例如”5”、”abc”、”中國人”。
結構型必須使用struct來標記。
結構型的成員允許包含數據成員、方法成員等
數據成員表示結構的數據項
方法成員表示對數據項的操作。
1. 變量的概念
在程序運行過程中,其值可以被改變的量稱為變量。
變量名:每個變量都必須有一個名字。變量命名應遵循標識符的命名規則,如必須以字母或下劃線打頭,只能包含英文字母、數字、和下劃線,不能包含空格等。
變量值:變量值存儲在內存中;不同類型的變量,占用的內存單元(字節)數不同。在程序中,通過變量名來引用變量的值。
2. 變量的定義
變量定義的一般形式為:
數據類型 變量名1,變量名2,……;
例如:
int a,b,c; long x,y; float p1,p2;
3.變量的初始化
例如:
float f1=1.25, f2=3.6;
值類型之間的數據可以相互轉換,轉換的方法有兩種,一種是隱式轉換,另一種是顯式轉換。
1. 隱式轉換
如果參與運算的數據類型不相同,則先轉換成同一類型,然后進行運算;
轉換時按數據長度增加的方向進行,以保證精度不降低,例如int型和long型運算時,先把int數據轉成long型后再進行運算;
所有的浮點運算都是以雙精度進行的,即使僅含float單精度量運算的表達式,也要先轉換成double型,再作運算;
byte型和short型數據參與運算時,必須先轉換成int型;
Char型可以隱式轉換為ushort、int、uint、long、ulong、float、double或decimal型,但不存在其他類型到char類型的隱式轉換。
2. 顯式轉換
強制類型轉換的一般形式為:
(類型說明符) (待轉換的數據)
例如:(int)(x+y) //把x+y的值強制轉換為int型
注意:上例不可寫為(int)x+y,另外經過強制類型轉換后x、y本身的變量類型并不會改變
3. C#還允許使用System.Convert類提供的類型轉換方法來轉換數據類型
常用的轉換方法有ToBoolean 、ToByte、ToChar、ToInt32、ToSingle、ToString等
例如
byte x=40,y=5; //定義字節型變量x和y byte z=Convert.ToByte(x+y); //將int型值轉換為byte型并賦給byte型變量z char c=Convert.ToChar(z+20); //將int型值轉換為char型并賦給char型變量z
C#算術運算符包括+、-、*、/、%、++、--共七種
自增++/自減--運算符
當++或--運算符置于變量的左邊時,稱之為前置運算,表示先進行自增或自減運算再使用變量的值,而當++或--運算符置于變量的右邊時,稱之為后置運算,表示先使用變量的值再自增或自減運算
例如:設變量i=1、變量j=2,則表達式++i + j-- 的值為4
2. 復合賦值運算符
+=、-=、*=、/=、%=、&=、|=、^=、<<=、>>=
1. 什么是數組
數組是一種由若干個變量組成的集合,數組中包含的變量稱為數組的元素,它們具有相同的類型。
數組元素可以是任何類型,包括數組類型。
數組元素的個數稱為數組的長度,數組長度為0時稱數組為空數組。
數組元素沒有名稱,只能通過索引來訪問,索引從零開始。
具有 n 個元素的數組的索引是從 0 到 n-1。
C#支持一維數組和多維數組。
2. 數組的聲明和創建
C#中的數組是一個對象,所以使用new運算符來創建
聲明和創建一維數組的一般形式:
數組類型[ ] 數組名 = new 數組類型[數組長度];
如:
int[ ] numbers=new int[5]; //創建具有5個元素的一維數組numbers
聲明和創建多維數組的一般形式:
數組類型[逗號列表] 數組名 = new 數組類型[數組長度列表]
如:
int[,,] numbers=new int[5,4,3]; //創建一個三維數組numbers
3. 數組的初始化
(1)在創建數組時初始化
創建一維數組時初始化的一般形式為:
數組類型[ ] 數組名 = new 數組類型[數組長度]{初始值列表};
如:
int[ ] numbers=new int[ ]{1,2,3,4,5} ;//當省略數組長度時,則給出的數據個數即為數組長度
上例中numbers[0]=1,……,numbers[4]=5
在創建并初始化數組時,還可采用簡寫形式:
數組類型[ ] 數組名 ={初始值列表}
如
int[ ] numbers={1,2,3,4,5} ;
3. 數組的初始化
(2)在聲明一維數組后初始化數組
在聲明后初始化一維數組的一般形式為:
數組類型[ ] 數組名;
數組名 = new 數組類型[數組長度]{初始值列表};
如:
int[ ] numbers; numbers = new int[ ]{1,2,3,4,5} ;
注意在先聲明后初始化時,不能采用簡寫形式,例如:
int[ ] numbers; numbers = {1,2,3,4,5} ;
是錯誤的
4. 數組的使用:
每個數組元素相當于一個普通變量,使用數組元素的一般形式為:
數組名[索引]
C#的數組類型是從抽象基類型System.Array派生的引用類型, System.Array類提供的Length屬性可以用來獲得數組的個數。
另外System.Array提供了Clear、CopyTo、Find、Resize、Sort等方法,用于清除數組元素的值、復制數組、搜索數組、更改數組長度和對數組元素排序等。
5.System.String與 System.Text.StringBuilder
C#的string 是.NET Framework中System.String 的別名,可創建不可變的字符串。其提供的常用屬性和方法有Length、Copy、IndexOf、LastIndexOf、Insert、Remove、Replace、Split、Substring、Trim等,分別用來獲得字符串長度、復制字符串、從左查找字符、從右查找字符、插入字符、刪除字符、替換字符、分割字符串、取子字符串、壓縮字符串的空白等。
System.Text.StringBuilder類用來構造可變字符串,包含Length、Append、Insert、Remove、Replace、ToString等成員,分別用來獲得字符串長度、追加字符、插入字符、刪除字符、替換字符和將StringBuilder轉換為string字符串。
對象(Object),是問題域中某些事物的一個抽象,反映事物在系統中需要保存的必要信息和發揮的作用,是包含一些特殊屬性(數據)和服務(行為方法)的封裝實體。
具體來說,對象應有唯一的名稱、有一系列狀態(表示為數據)、有表示對象行為的一系列行為(方法),如右圖所示。
對象=數據+動作(方法/操作)
1. 事件(Event)
又稱消息(Message)表示向對象發出的服務請求。
2. 方法(Method)
表示對象能完成的服務或執行的操作功能。
類(Class)是具有相同屬性和服務的一組對象的集合
類為屬于同類的所有對象提供統一的抽象描述。其中,相同的屬性是指定義形式相同,不是指屬性值相同。
對象是類的一個實例。
類與實例的關系是抽象與具體的關系,類是多個實例的綜合抽象,實例是類的個體實物。
面向對象的最基本的特征是封裝性、繼承性和多態性:
1. 封裝
封裝就是指把對象的全部屬性和全部服務結合在一起形成一個不可分割的獨立單位。
封裝是一種信息隱蔽技術,用戶只能見到對象封裝界面上的信息,對象內部對用戶是隱蔽的。
封裝的目的在于將對象的使用者與設計者分開,使用者不必了解對象行為的具體實現,只需要用設計者提供的消息接口來訪問該對象。
例如,各種有標準視頻接口的設備都可以連接電視機。
2.繼承
特殊類的對象擁有其一般類的全部屬性與服務,稱作特殊類對一般類的繼承,即在特殊類中不必重新定義已在一般類中定義過的屬性和服務,這種特性在面向對象中稱作對象的繼承性。
繼承在C#中稱為派生,其中,一般類稱為基類或父類,特殊類稱為派生類或子類。
例如靈長類動物稱為一般類,具有屬性包括手和腳(其它動物沒有),具有的服務是抓取東西(其它動物沒有),人類作為特殊的靈長類高級動物,除了繼承靈長類動物的所有屬性和服務外,還具有特殊的服務(創造工具)。
繼承機制的優勢在于降低了軟件開發的復雜性和費用,使軟件系統易于擴充
3. 多態
多態性是指在基類中定義的屬性或服務被派生類繼承后,可以具有不同的數據類型或表現出不同的行為。
為了實現多態性,需要在派生類中更改從基類中自動繼承來的數據類型或方法。
這種為了替換基類的部分內容而在派生類中重新進行定義的操作,在面向對象概念中稱之為覆蓋。
例如,假設機動車類是一個基類,它具有一個稱為更換輪胎的方法,但是當從機動車派生火車類時,火車更話車輪的方法與一般的機動車不同,于是只能通過覆蓋的方法在火車類中重新定義一個更換車輪的方法,以替換其基類的方法。
多態性的優勢在于使軟件開發更加方便,增加程序的可讀性。
類的常量成員是一種符號常量,必須指定名稱和值
訪問修飾符包括:public、private、internal、protected、protected internal。
在使用訪問修飾符來定義命名空間、結構和類及其成員
時,需注意:
(1)一個成員或類型只能有一個訪問修飾符,使用protected internal組合時除外。
(2)命名空間上不允許使用訪問修飾符,命名空間沒有訪問限制。
(3)如果未指定訪問修飾符,則使用默認的可訪問性,類成員默認為private。
(4)頂級類型(不嵌套在其他類型中的類型)的可訪問性只能是internal或public,默認可訪問性是internal。
定義方法的詳細說明
(1) 訪問修飾符控制方法的訪問級別,可用于方法的修飾符包括:public、protected、private、internal等等。
(2) 方法的返回值類型可以是任何合法的數據類型,包括值類型和引用類型。當無返回值時,返回值類型使用void關鍵字來表示。
(3) 方法名必須符合C#的命名規范,與變量名命名規則相同。
(4) 參數列表是方法可以接受的輸入數據。當方法不需要參數時,可省略參數列表,但不能省略圓括號。當參數不止一個時,需要使用逗號作間隔,同時每一個參數都必須聲明數據類型,即使這些參數的數據類型相同也不例外。
(5) 花括號{}中的內容為方法的主體,由若干條語句組成,每一條語句都必須使用分號結尾。當方法結束時如果需要返回操作結果,則使用return語句返回,此時要注意return語句返回的值的類型要與方法返回值類型相匹配。如果方法使用void標記為無返回值的方法,可省略return語句。
1. 值類型參數
調用方向方法傳遞值類型參數時,調用方將把實參變量的值賦給相對應的形參變量,即實參變量和形參變量是兩個不相同的變量。
實參變量的值傳遞給形參變量時是一種單向值傳遞。
引用型參數
與值參數不同,調用方向方法傳遞引用類型參數時,調用方將把實參變量的引用賦給相對應的形參變量。實參變量的引用代表數據值的內存地址,因此,形參變量和實參變量將指向同一個引用。
如果在方法內部更改了形參變量所引用的數據值,則同時也修改了實參變量所引用的數據值。
由于使用return語句一次只能返回一個數據,如果需要返回多個數據,則可以利用引用型參數的這個特點來實現。
C#通過ref關鍵字來聲明引用參數,無論是形參還是實參,只要希望傳遞數據的引用,就必須添加ref關鍵字。
輸出參數
方法中的return語句只能返回一個運算結果,雖然也可以使用引用型參數返回計算結果,但要求先初始化實參。
而輸出參數不需要對實參進行初始化,它專門用于把方法中的數據通過形參返回給實參,但不會將實參的值傳遞給形參。一個方法中可允許有多個輸出參數。
C#通過out關鍵字來聲明輸出參數,無論是形參還是實參,只要是輸出參數,都必須添加out關鍵字。
數組型參數
把數組作為參數,有兩種使用形式:
一種是在形參數組前不添加params修飾符
另一種是在形參數組前添加params修飾符。
兩種形式的區別
不添加params修飾符時,所對應的實參必須是一個數組名。
添加params修飾符時,所對應的實參可以是數組名,也可以是數組元素值的列表。
值得注意的是,無論采用哪一種形式,形參數組都不能定義數組長度。
方法的重載
方法的重載是指在同一個類型中,以同樣的名稱聲明兩個或多個方法。當需要以不同的參數列表執行同樣的操作時,方法重載將會很有用。
2. 析構函數的特點:
(1) 不能在結構中定義析構函數,只能對類使用析構函數;
(2) 一個類只能有一個析構函數;
(3) 無法繼承或重載析構函數;
(4) 析構函數既沒有修飾符,也沒有參數;
(5) 在析構函數被調用時,.Net Framework的CLR自動添加對基類Object.Finalize方法的調用以清理現場,因此在析構函數中不能包含對Object.Finalize方法的調用。
注意,在默認情況下,編譯器自動生成空的析構函數,因此C#不允許定義空的析構函數
1. 靜態類的定義:
靜態類使用static關鍵字來聲明,表明它僅包含靜態成員。
不能使用new關鍵字創建靜態類的實例 。
在實際應用中,當類中的成員不與特定對象關聯的時候,就可以把它創建為靜態類。
2. 靜態類的主要功能:
(1) 靜態類僅包含靜態成員;
(2) 靜態類不能被實例化;
(3) 靜態類是密封的;
(4) 靜態類不能包含實例構造函數。
3. 靜態類的優點:
(1) 編譯器能夠自動執行檢查,以確保不添加實例成員;
(2) 靜態類能夠使程序的實現更簡單、迅速,因為不必創建對象就能調用其方法。
注意:因為靜態類是密封的,因此不可被繼承。另外,靜態類不能包含實例構造函數,但仍可以聲明靜態構造函數,以分配初始值或設置某個靜態狀態。
(1) 派生類的特點
可以擁有自己的成員。
可以隱式地從基類繼承所有成員,包括方法、字段、屬性和事件,但私有成員、構造函數和析構函數等除外。
派生類只能從一個類中繼承
密封類
使用密封類可以阻止一個類的代碼被其他類繼承
使用密封類的好處:
可以提高應用程序的可靠性和性能(在.NET Framework公共語言運行時CLR中,加載密封類時將對密封類的方法調用進行優化)。
軟件企業通過使用密封類還可以把自己的知識產權保護起來,避免他人共享代碼。
在C#中,添加關鍵字sealed可以聲明密封類。
4.為了使用派生類能更改基類的數據和行為,C#提供了兩種選擇:1.使用新的派生類成員替換基成員2. 重寫虛擬的基成員
使用virtual和override時要注意以下幾點:
(1)字段不能是虛擬的,只有方法、屬性、事件和索引器才可以是虛擬的;
(2)使用virtual修飾符后,不允許再使用static、abstract或override修飾符;
(3)派生類對象即使被強制轉換為基類對象,所引用的仍然是派生類的成員;
(4)派生類可以通過密封來停止虛擬繼承,此時派生類的成員使用sealed override聲明。
抽象類的特點:
抽象類是用來作為基類的,不能直接實例化,而且只能使用abstract關鍵字來標識。抽象類的用途是提供多個派生類可共享的基類的公共定義。
抽象類可以包含抽象的成員,如抽象屬性和抽象方法,也可以包含非抽象的成員,甚至還可以包含虛方法。
抽象屬性的特點
類的屬性成員添加了abstract關鍵字后,就成了抽象屬性。
抽象屬性聲明不提供屬性訪問器的實現,它只聲明該類支持的屬性,而將訪問器的實現留給派生類。
抽象屬性同樣可以是只讀的、只寫的或可讀寫的屬性。
當派生類從抽象類中繼承一個抽象屬性時,派生類必須重載該抽象屬性。
抽象屬性使用abstract關鍵字來標識
抽象方法的特點:
類的方法成員添加abstract關鍵字后,就成為抽象方法。
抽象方法聲明不提供方法的實現,它必須是一個空方法,而將方法實現留給派生類。
當派生類從抽象類中繼承一個抽象方法時,派生類必須重載該抽象方法。
由于抽象方法沒有實現,因此,抽象方法不包含常規的方法體,以分號結尾。
1.委托(delegate)是一種引用方法的類型,它與類、接口和數組相同,屬于引用型。
在C#程序中,可以聲明委托類型、定義委托類型的變量、把方法分配給委托變量,還可以通過委托來間接地調用一個或多個方法。
一旦為委托分配了方法,委托將與該方法具有完全相同的行為。
C#允許把任何具有相同簽名(相同的返回值和參數)的方法分配給委托變量。
委托的實質是代表方法的引用(即內存地址),是定義回調方法的理想選擇,也是C#實現事件驅動的編程模型的主要途徑。
委托具有以下特點:
(1)委托類似于 C++ 函數指針,是完全面向對象的,是安全的數據類型。
(2)委托允許將方法作為參數進行傳遞。
(3)委托可用于定義回調方法。
(4)委托可以鏈接在一起。例如,可以對一個事件調用多個方法。
(5)委托簽名不需要與方法精確匹配。
集合是通過高度結構化的方式存儲任意對象的類,與無法動態調整大小的數組相比,集合不僅能隨意調整大小,而且對存儲或檢索存儲在其中的對象提供了更高級的方法。
集合可以把一組類似的類型化對象組合在一起。
選擇集合類時,一般要考慮以下問題:
(1)是否需要一個序列列表,需要先進先出行為時可使用 Queue 隊列類,在需要后進先出行為時可使用 Stack棧類。
(2)是否需要隨機訪問集合中的元素,此時不能選擇Queue 隊列類、Stack棧類、LinkedList 雙向鏈表類。
(3)是否需要通過索引訪問每個元素,只有ArrayList動態數組類、StringCollection字符串集合類等是從索引為零的元素開始逐個訪問集合元素。Hashtable哈希表、Dictionary字典類通過元素的鍵(即元素名字)提供對元素的訪問。而NameValueCollection 類和SortedList 泛型類通過其元素的從零開始的索引,或者通過其元素的鍵提供對元素的訪問。
(4)是否包含一個值、一個鍵和一個值的集合,還是一個鍵和多個值的集合。其中,“一個值”的集合是一種基于 IList 列表接口派生的集合,“一個鍵和一個值”的集合是一種基于IDictionary字典接口的集合,“一個鍵和多個值”的集合是 NameValueCollection 類。
(5)是否需要用與輸入元素方式不同的方式對元素排序。Hashtable 哈希表類按其元素的哈希代碼對元素排序,SortedList有序表類以及 SortedDictionary有序字典根據 IComparer 可比較接口來實現按鍵對元素的排序,而ArrayList動態數組類提供 Sort 排序方法。
(6)是否需要信息的快速搜索和檢索,對于小集合(10個元素或更少),ListDictionary 比 Hashtable 快,SortedDictionary 泛型類提供比 Dictionary 泛型類更快的查找。
(7)是否需要只接受字符串的集合,如使用StringCollection和 StringDictionary等。
動態數組類ArrayList不限制元素的個數和數據類型。
(1) ArrayList與Array的區別
Array 的大小是固定的,而 ArrayList的大小可根據需要自動擴充;
在Array中一次只能獲取或設置一個元素的值,而在ArrayList中允許添加、插入或移除某一范圍的元素;
Array 的下限可以自定義,而ArrayList的下限始終為零;
Array 可以具有多個維度,而 ArrayList始終只是一維的;
Array 位于 System 命名空間中,ArrayList 位于 System.Collections 命名空間中。
(2) 創建動態數組:
ArrayList 列表對象名 = new ArrayList(?);
隊列的特點
一種先進先出的數據結構,當插入或刪除對象時,對象從隊列的一端插入,從另外一端移除
創建隊列對象
Queue 隊列名 = new Queue([隊列長度][,增長因子]);
說明,隊列長度默認為32,增長因子默認為2.0(即每當隊列容量不足時,隊列長度調整為原來的2倍)
注意,由于調整隊列的大小需要付出一定的性能代價,因此建議在構造隊列時指定隊列的長度。
常用隊列操作方法包括Enqueue向隊尾添加數據、Dequeue移除隊頭數據、Peek返回隊頭數據、Clear清空隊列和Contains檢查是否包含某個數據等。其中,Enqueue和Dequeue每操作一次只能添加或刪除一個數據。
棧的特點:
一種先進后出的數據結構,這種數據結構在插入或刪除對象時,只能在棧頂插入或刪除。
創建棧對象:
Stack 棧名 = new Stack(?);
棧常用方法包括Push在棧頂添加數據、Pop移除棧頂數據、Peek返回棧頂數據、Clear清空棧和Contain檢查是否包含某個數據等。其中,Push和Pop每操作一次只能添加或刪除一個數據。
哈希表又稱散列表,表示鍵/值對的集合。
哈希表的特點:在保存集合元素時,首先要根據鍵自動計算哈希代碼,以確定該元素的保存位置,再把元素的值放入相應位置所指向的存儲桶中。查找時,再次通過鍵所對應的哈希代碼到特定存儲桶中搜索。這樣可以大大減少為查找一個元素進行的比較次數。
創建哈希表對象
Hashtable 哈希表名 = new Hashtable([哈希表長度][,增長因子]);
說明,默認長度為0,默認增長因子為1.0
哈希表常用操作方法包括Add添加數據、Remove移除數據、Clear清空哈希表和Contains檢查是否包含某個數據等。其中, Add方法需要兩個參數,一個是鍵,一個是值;Remove方法只需要一個鍵名參數。
接口索引器與類索引器的區別有兩個:
一是接口索引器不使用修飾符;
二是接口索引器只包含訪問器get或set,沒有實現語句。
創建自定義的泛型類時,需要特別注意以下事項:
(1)將哪些類型通用化為類型參數
一般規則是:能夠參數化的類型越多,代碼就會變得越靈活,重用性就越好,但太多的通用化會使其他開發人員難以閱讀或理解代碼。
(2)如果存在約束,應對類型參數應用什么約束
一般規則是:應用盡可能最多的約束,但仍能夠處理需要處理的類型。例如,如果知道泛型類僅用于引用類型,則應用類約束。這可以防止泛型類被意外地用于值類型。
(3)是否將泛型行為分解為基類和子類
由于泛型類可以作為基類使用,其注意事項與非泛型類相同。
(4)是否實現一個或多個泛型接口。
事件處理系統的構成要素
(1) 事件源:指能觸發事件的對象,有時又稱為事件的發送者或事件的發布者;
(2) 偵聽器:指能接收到事件消息的對象,Windows提供了基礎的事件偵聽服務;
(3) 事件處理程序:當事件發生時對事件進行處理,又稱事件函數或事件方法,包含事件處理程序的對象稱為事件的接收者,又稱事件的訂閱者。
C#中的事件具有以下特點:
(1) 事件是類用來通知對象需要執行某種操作的方式;
(2) 盡管事件在其他時候(如信號狀態更改)也很有用,但通常還是用在圖形用戶界面中;
(3) 事件通常使用委托事件處理程序進行聲明;
(4) 事件可以調用匿名方法來替代委托。
1. 事件的基本概念
觸發事件的對象稱為發布者,提供事件處理程序的對象稱為訂閱者。在.NET Framework中,基于事件驅動的程序使用委托來綁定事件和事件函數,在C#中,事件實際上就是一個委托類型的變量。
C#允許使用內置的EventHandler委托類型來聲明一個標準的事件,也允許先自定義委托,再聲明自定義事件。
在.NET Framework中,內置的EventHandler委托具有兩個參數,它們的數據類型分別是Object和EventArgs類型,并且沒有返回值。
Object參數名通常為sender,表示事件發布者本身;EventArgs參數通常為e,它將System.EventArgs類的新實例傳遞給事件函數。在實際編程中,有時需要從EventArgs類派生自定義事件參數類,這樣發布者可以將特定的數據發送給接收者的事件函數。
事件的聲明
(1) 使用內置的EventHandler委托聲明事件的形式(標準事件)
格式:public event EventHandler 事件名;
其中,事件名通常使用on作為前綴符。
例如,public event EventHandler onClick;
(2) 使用自定義的委托類型聲明事件
格式:public delegate 返回值類型 委托類型名([參數]);
public event 委托類型名 事件名;
其中,委托類型的參數非常靈活,可以省略,可以是標準的Object參數和EventArgs參數,也可以是其他參數,但一定要注意保證與事件函數的參數匹配。
在訂閱事件時要把握好以下幾點:
(1)首先接收類必須具有與事件自身具有相同簽名(相同返回值類型和參數)的方法,然后該方法(稱為事件處理程序)可以采取適當的操作來響應該事件。
(2) 每個事件可有多個處理程序,多個處理程序按順序調用。如果一個處理程序引發異常,還未調用的處理程序則沒有機會接收事件。基于這個原因,建議事件處理程序迅速處理事件并避免引發異常。
(3) 若要訂閱事件,接收器必須創建一個與事件具有相同類型的委托,并使用事件處理程序作為委托目標,還要使用加法賦值運算符 (+=) 將該委托添加到源對象的事件中。
(4) 若要取消訂閱事件,接收器可以使用減法賦值運算符(?=)從源對象的事件中移除事件處理程序的委托。
1. Windows窗體
Windows窗體是使用C#來建立基于窗口應用程序的出發點。不過,從窗體本身來看,它只是一個可移動的界面而已。雖然用戶可以直接在窗體上繪制對象和文本,但是窗體的真正作用是充當Windows控件的容器。
控件的本質就是窗體的成員對象,用于顯示信息并且接收用戶輸入的信息。
2. Windows窗體命名空間
Windows窗體的基類是Form,在System.Windows.Forms命名空間中定義.
.NET中的大多數控件都派生于System.Windows.Forms.Control類,該類定義了控件的基本功能。
.NET Framework中的窗體控件
數據顯示 DataGridView
數據綁定和定位 BindingSource、BindingNavigator
文本編輯 TextBox、RichTextBox、MaskedTextBox
信息顯示 Lable、StatusStrip、ProgressBar
網頁顯示 WebBrowser
列表與選擇 CheckBox、CheckedListBox、ComboBox、RadioButton、ListBox、ListView、NumericUpDown、TreeView、DomainUpDown、TrackBar、
圖形顯示 PictureBox、ImageList
日期設置 DateTimePicker、MonthCalendar
對話框 ColorDialog、FontDialog、OpenFileDialog、PrintDialog、PrintPreviewDialog、FolderBrowerDialog、SaveFileDialog
命令 Button、LinkLabel、NotifyIcon、ToolStrip
菜單 MenuStrip、ContextMenuStrip
用戶幫助 HelpProvider、ToolTrip
將其他控件分組 Panel、GroupBox、TabControl、SplitContainer、TableLayoutPanel、FlowLayoutPane
控件的屬性
屬性名稱 說明
Anchor 獲取或設置控件綁定到的容器的邊緣并確定控件如何隨其父級一起調整大小
BackColor 控件的背景色
Bottom 控件下邊緣與其容器的工作區上邊緣之間的距離(單位:像素)
Dock 獲取或設置控件邊框停靠到其父控件并確定控件如何隨其父級一起調整大小
Enabled 控件是否可以對用戶交互作出響應
ForeColor 控件的前景色
Height 控件的高度
Left 控件左邊緣與其容器的工作區左邊緣之間的距離(單位:像素)
Location 控件的左上角相對于其容器的左上角的坐標。
Name 控件的名稱,這個名稱可以在代碼中用于引用該控件。
Parent 控件的父容器
Right 控件右邊緣與其容器的工作區左邊緣之間的距離(單位:像素)
Size 控件的高度和寬度
TabIndex 控件的 Tab 鍵順序
TabStop 指示用戶能否使用 Tab 鍵將焦點放到該控件上。
Text 與此控件關聯的文本
Top 控件上邊緣與其容器的工作區上邊緣之間的距離(單位:像素)
Visible 指示是否顯示該控件
Width 控件的寬度
按鈕控件
Button(按鈕)控件位于.NET Framework的System.Windows.Forms命名空間,它是從基類ButtonBase派生的。基類ButtonBase用于實現按鈕控件所需的基本操作。
Button控件是一種常用控件,在需要用戶做“確定”或“取消”之類的選擇,通常都使用Button控件。 Button控件支持鼠標的單擊和雙擊操作,也可以用<Enter>鍵來進行操作。
在設計時,通常在窗體上添加控件,然后雙擊它,為Click事件編寫代碼即可。在執行程序時,單擊該按鈕就會執行Click事件中的代碼。
Name屬性:用于設置對象的名稱,以便在代碼中引用。
系統自動給Button控件命名button1、button2……
最好給Name屬性設置一個有實際意義的名稱。
各種控件對象的Name屬性只能通過“屬性”窗口更改,該屬性在設計時有效,運行時為只讀。
Text屬性:以文本形式顯示在按鈕上的標題文字。
除單擊按鈕外,還可以給按鈕定義“Alt+快捷鍵”,見P155圖7-2。
定義方法,在快捷鍵字母前面加上一個“&”字符。
例如:button1.Text = “確定(&Y)”; //顯示標題為“確定(Y)”
Visible屬性:決定該按鈕是否可見
屬性值為true可見,為false隱藏。
當一個控件不可見時,則不能響應用戶的鼠標和鍵盤操作。
Visible屬性在運行時生效。
Enabled屬性:決定該按鈕是否有效
屬性值為false時按鈕文字以灰色顯示,對用戶的操作不響應。
FlatStyle屬性:決定該按鈕的樣式,值為FlatStyle枚舉型
FlatStyle枚舉型有4個枚舉值,分別為Flat(平面顯示)、Popup(平面顯示,但鼠標移到時外觀為三維)、Standard(三維顯示)、System(外觀由操組系統決定),效果見P156圖7-3。
Button控件的FlatStyle屬性默認為Standard。
Image屬性:指定一個在按鈕上顯示的圖像
ImageAlign屬性:設置圖像在按鈕上的對齊方式
標簽控件
作用:主要用于在窗體上顯示文本
控件名:
Label:標準的Windows標簽;
LinkLabel:類似于Label,但以超鏈接方式顯示 ,效果見圖7-4。
一般情況下,不需要為Label控件添加事件處理代碼,但在需要時也可以支持事件
標簽控件的常用屬性
屬性名稱 說明
BorderStyle 控件的邊框樣式,默認為無邊框
FlatStyle 設置平面樣式外觀。如果設置為PopUp,表示平面樣式,當鼠標指向它時,控件顯示為彈起樣式。
Image 顯示在 Label 上的圖像
ImageAlign 控件中顯示的圖像的對齊方式
LinkArea 文本中顯示為鏈接的范圍(只用于LinkLabel)
LinkColor 顯示普通鏈接時使用的顏色(只用于LinkLabel)
Links 獲取包含在 LinkLabel 內的鏈接的集合 (只用于LinkLabel)
LinkVisited 鏈接是否顯示為如同被訪問過的鏈接(只用于LinkLabel)
TextAlign? 標簽中文本的對齊方式
VisitedLinkColor 顯示以前訪問過的鏈接時所使用的顏色(只用于LinkLabel)
文本框控件
.NET FrameWork內置兩個文本框控件: TextBox控件和RichTextBox控件,它們都派生于TextBoxBase,而TextBoxBase派生于Control類。
TextBoxBase提供了在文本框中處理文本的基本功能,例如選擇文本、剪貼、粘貼和相關事件。
TextBox用途主要是讓用戶輸入文本,也可以指定用戶輸入字符的類型,如只允許數值。默認情況下一個文本框最多輸入2048個字符。如果將Multiline屬性設為true,則最多可輸入32k文本。用戶文本保存在Text屬性中,在程序中引用Text屬性即可獲得用戶輸入的文本。
RichTextBox多用于顯示和輸入格式化的文本(TextBox常用于錄入較短的文本字符), RichTextBox可以顯示字體、顏色和鏈接,從文件加載文本和加載嵌入的圖像,及查找指定的字符, RichTextBox也被稱為增強的文本框。
TextBox控件
屬性名稱 說明
CausesValidation? 是否驗證用戶輸入的有效性
CharacterCasing 是否在字符鍵入時修改其大小寫格式
MaxLength? 設置能輸入的最大字符數,如果=0,則不受限制
Multiline 是否可以顯示多行文本
PasswordChar 設置密碼顯示字符
ReadOnly? 文本是否為只讀
ScrollBars 獲取或設置哪些滾動條應出現在多行 TextBox 控件中
SelectedText? 表示當前選定的文本
SelectionLength? 當前選定的字符數
SelectionStart? 當前選定的文本起始點
Text 當前文本
WordWrap? 是否自動換行
事件名稱 說明
Enter? 進入控件時發生這4個事件按列出的順序觸發,它們被稱為“焦點事件”,當控件的焦點改變時觸發,但Validating和Validated僅在控件接收了焦點且其CausesValidation設置為true時實被觸發
Leave? 在輸入焦點離開控件時發生
Validating? 在控件正在驗證時發生
Validated? 在控件完成驗證時發生
KeyDown 這3個事件統稱為“鍵事件”,用于監視和改變輸入到控件中內容,KeyDown和KeyUp?接收與所按下鍵對應的鍵碼,可以來確定是否按下了特殊了鍵,如Shift、Ctrl或F1。KeyPress接收與鍵對應的字符
KeyPress
KeyUp?
TextChanged? 只要文本框中的文本發生了改變,就會觸發該事件
RichTextBox控件
屬性名稱 說明
CanRedo? 指示在 RichTextBox 內發生的操作中是否有可以重新應用的操作
CanUndo? 指示用戶在文本框控件中能否撤消前一操作
DetectUrls 當在控件中鍵入某個URL時,RichTextBox 是否自動設置 URL 的格式
Rtf 與Text屬性相類似,但可包括RTF 格式的文本
SelectedRtf 獲取或設置控件中當前選擇的 RTF 格式的格式化文本
SelectedText 獲取或設置 RichTextBox 內的選定文本
SelectionAlignment 選定內容或插入點的對齊方式,可以取值為Cente、Left或Right
SelectionBullet? 指示項目符號樣式是否應用到當前選定內容或插入點
BulletIndent? 指定項目符號的縮進像素值
SelectionColor 獲取或設置當前選定文本或插入點的文本顏色
SelectionFont 獲取或設置當前選定文本或插入點的字體
SelectionLength? 獲取或設置控件中選定的字符數
ShowSelectionMargin 如果把這個屬性設置為true,在RichTextBox左邊就會出現一個頁邊距,方便選擇文本
UndoActionName 獲取調用 Undo方法后在控件中可撤消的操作名稱
SelectionProtected 把這個屬性設置設置為true,可以指定不修改文本的某些部份
RadioButton控件
屬性名稱 說明
Appearance 獲取或設置一個值,該值用于確定 RadioButton 的外觀。
可選值:Normal和Button。每種類型都可顯示文本或圖像,或同時顯示兩者。
選擇Normal后的外觀: 。選擇Button后的外觀:
AutoCheck 如果這個屬性為true,用戶單擊單選按鈕時,會顯示一個選中標記。如果該屬性為false,就必須在Click事件處理程序的代碼中手工檢查單選按鈕
CheckAlign 改變單選按鈕的復選框的對齊形式,值可為枚舉ContentAlignment 有效值之一。默認值為 MiddleLeft,意為內容在垂直方向上中間對齊,在水平方向上左邊對齊
Checked 獲取或設置一個值,該值指示是否已選中控件。如果選中控件,它就是true,否則為false
GroupBox控件
GroupBox (分組框)控件用于為其他控件提供可識別的分組。 通常,使用分組框按功能細分窗體。
當移動單個GroupBox控件時,它包含的所有控件也會一起移動。
在窗體上創建GroupBox控件及其內部控件時,必須先建立GroupBox控件,然后在其內建立各種控件。
Panel控件
Panel (面板)控件類似于GroupBox 控件。二者的區別在于,只有GroupBox 控件能顯示標題,只有Panel 控件可以有滾動條 。
若要顯示滾動條,需將 AutoScroll 屬性設置為 true 。
可以通過設置 BackColor、BackgroundImage 和 BorderStyle 屬性自定義面板的外觀 。
TabControl控件
屬性名稱 說明
Alignment 控制選項卡在控件中的顯示位置,默認為控件的頂部
Appearance 控制選項卡的顯示方式,選項卡可以顯示為一般的按鈕或帶有平面的樣式
HotTrack 如為true,則當鼠標指針移過控件上的選項卡時,其外觀就會改變
Multiline 如為true,則可以以多行顯示選項卡
RowCount 返回當前顯示的選項卡行數
SelectedItem 獲取或設置當前選定的選項卡頁的索引
SelectedTab 獲取或設置當前選定的選項卡頁,該屬性在TabPages的實例上使用
TabCount 獲取選項卡條中選項卡的數目。
TabPages 獲取該選項卡控件中選項卡頁的集合,使用這個集合可以添加和刪除TabPages對象
StatusStrip 控件中窗格的常用屬性
屬性名稱 說明
AutoSize 是否基于項的圖像和文本自動調整項的大小
Alignment 設定StatusStrip控件上窗格的對齊方式,可選項包括:Center、Left和Right
BorderStyle 設定窗格邊框的樣式,可選項如下:
None:不顯示邊框; Raised:窗格以三維凸起方式顯示;Sunken:窗格以三維凹起方式顯示
Image 設定窗格顯示的圖標
MinimumSize 設定窗格在狀態欄中的最小寬度
Spring 指定項是否填滿剩余空間
Text 設定窗格的顯示文本
Width 設定窗格的寬度,取決于AutoSize屬性的設置,當窗體大小改變時該屬性值可能會隨之變化
Show方法將返回一個DialogResult枚舉值指示對話框的返回值
成員 說明
Abort 對話框的返回值是 Abort(通常從標簽為“中止”的按鈕發送)?
Cancel 對話框的返回值是 Cancel(通常從標簽為“取消”的按鈕發送)?
Ignore 對話框的返回值是 Ignore(通常從標簽為“忽略”的按鈕發送)?
No 對話框的返回值是 No(通常從標簽為“否”的按鈕發送)?
None 從對話框返回了 Nothing。這表明有模式對話框繼續運行?
OK 對話框的返回值是 OK(通常從標簽為“確定”的按鈕發送)?
Retry 對話框的返回值是 Retry(通常從標簽為“重試”的按鈕發送)?
Yes 對話框的返回值是 Yes(通常從標簽為“是”的按鈕發送)?
驅動器
.NET Framework提供DriveInfo類和DriverType枚舉型,以方便在程序中直接使用驅動器。 DriveInfo類和DriverType枚舉型位于System.IO命名空間。
DriveInfo類
作用:確定有關驅動器的信息,包括驅動器盤符、驅動器類型、驅動器上的可用空間等
常用成員:
字段:DriveFormat(文件系統格式,如NTFS或FAT32)、DriveType(驅動器類型)、Name(驅動器名)、TotalSize(總空間)、TotalFreeSpace(可用空間)
方法:GetDrives(獲得可用驅動器列表)
perType枚舉型
枚舉值有CDRom(光驅)、Fixed(硬盤)、Network(網絡驅動器)、Removable(軟盤或U盤)等
目錄
.NET Framework提供Directory類和DirectoryInfo類 ,以方便在程序中直接操作目錄。 Directory類和DirectoryInfo類位于System.IO命名空間,都可以用來實現創建、復制、移動或刪除目錄等操作 。
Directory類
特點:靜態類,可以直接調用其方法成員,但調用每個方法成員都要執行安全檢查,以確定用戶的操作權限。
常用方法成員:CreateDirectory(創建新目錄)、Delete(刪除目錄)、Exists(判斷目錄是否存在)、Move(移動目錄)、GetFiles(獲得目錄的文件列表)、GetDirectories(獲得子目錄列表)等
DirectoryInfo類
特點:非靜態類(必須實例化),需要先創建實例才能調用其方法成員,在創建實例時執行安全檢查。
常用字段成員;Name(提取目錄名)、Exists(是否存在)、Parent(父目錄)、Root(根目錄)
常用方法成員:Create(創建目錄)、CreateSubDirectory(創建子目錄)、Delete(刪除目錄)、MoveTO(移動目錄)、GetFiles、GetDirectories等
代碼示例:P197
文件
NET Framework提供File類和FileInfo類 ,以方便在程序中直接操作文件。 File類和FileInfo類位于System.IO命名空間,都可以用來實現創建、復制、刪除、移動、打開文件等操作。
File類
特點:靜態類,可直接調用其方法成員。
常用方法成員:Open(打開文件)、Create(創建新文件)、Copy(復制文件)、Delete(刪除文件)、Exists(判斷文件是否存在)、Move(移動文件)、Replace(替換文件)、AppendAllText(新建文件并添加文本)、ReadAllText(打開并讀取文本內容)等
FileInfo類
特點:非靜態類,需要先創建實例。
常用字段成員:Name(提取文件名)、Directory(所屬目錄)、Exists(是否存在)、Extension(文件擴展名)、Length(文件長度)、IsReadOnly(是否為只讀文件)
常用方法成員:Open、Create、CopyTo(復制到新文件)、Delete、MoveTo(移動文件)、Replace、EnCrypt(加密文件)、Decrypt(解密文件)等 。
代碼示例:P198
路徑
文件所在位置稱為路徑。路徑由驅動器盤符、目錄名、文件名、文件擴展名和分隔符組成。
路徑的表示方法
絕對路徑:從驅動器的根目錄開始書寫,例如C:\Windows\System32\notepad.exe
相對路徑:從當前目錄位置開始書寫,例如System32\nodepad.exe(假設當前目錄為C:\Windows)
C#將“\”字符視為轉義字符,因此當路徑表示為字符串時,要使用兩個反斜杠表示,例如:
“C:\\Windows\\System32\\notepad.exe”
C#允許在字符串前添加“@”標志,以提示編譯器不要把“\”字符視作轉義字符,而視作普通字符,例如:
@“C:\Windows\System32\notepad.exe”
NET Framework提供Path類 ,以幫助在程序中管理文件和目錄路徑。Path類位于System.IO命名空間,是一個靜態類。
Path類作用:靜態類,用來操作路徑的每一個字段,如驅動器盤符、目錄名、文件名、文件擴展名和分隔符等。
Path常用字段成員:PathSeparator(路徑分隔符)、DirectorySeparatorChar(目錄分隔符)、VolumeSeparatorChar(卷分隔符)
Path常用方法成員:GetDirecotryName(取目錄名)、GetFileName(取文件名)、GetExtension(取文件擴展名)、GetFullPath(取完整路徑)、GetTempPath(取操作系統的臨時文件路徑)等
流包括以下基本操作。
讀取(read):表示把數據從流傳輸到某種數據結構中,例如輸出到字節數組中;
寫入(write):表示把數據從某種數據結構傳輸到流中,例如把字節數組中的數據傳輸到流中;
定位(seek):表示在流中查詢或重新定位當前位置。
操作流的類
(1) Stream類
Stream類是所有流的抽象基類。
Stream類的主要屬性:CanRead(是否指出讀取)、CanSeek(是否支持查找)、CanTimeout(是否可以超時)、CanWrite(是否支持寫入) 、Length(流的長度)、Position(獲取或設置當前流中的位置)、ReadTimeout(獲取或設置讀取操作的超時時間)、WriteTimeout(獲取或設置寫操作的超時時間)
Stream類的主要方法:BeginRead(開始異步讀操作)、BeginWrite(開始異步寫操作)、Close(關閉當前流)、EndRead(結束異步讀操作)、EndWrite(結束異步寫操作)、Flush(清除流的所有緩沖區并把緩沖數據寫入基礎設備)、Read(讀取字節序列)、ReadByte(讀取一個字節)、Seek(設置查找位置)、Write(寫入字節序列)、WriteByte(寫入一個字節)
(2) StreamReader和StreamWriter類
一般用來操作文本文件
流讀取器StreamReader類用來以一種特定的編碼從字節流中讀取字符。
流寫入器StreamWriter類用來以一種特定的編碼向流中寫入字符。
(3) FileStream、MemoryStream和BufferStream類
文件流FileStream類:以流的形式來讀、寫、打開、關閉文件。
內存流MemoryStream類:表示在內存中創建流,以暫時保存數據,有了它就無需在硬盤上創建臨時文件。
緩存流BufferStream類 :先把流添加到緩沖區,再進行讀/寫操作,使用緩沖區可以減少訪問數據時對操作系統的調用次數。
注意, FileStream類也具有緩沖功能,在創建FileStream類的實例時,只需要指定緩沖區的大小即可。
讀寫文本文件
文本文件是一種純文本數據構成的文件,只保存了字符的編碼。
NET Framework支持的字符編碼
可以是ASCIIEncoding、UTF7Encoding、UTF8Encoding、UnicodeEncoding或UTF32Encoding
在.NET Framework中讀寫文本文件主要使用:
文件讀取器TextReader類和文本寫入器TextWriter類
它們的派生類流讀取器StreamReader類和流寫入器StreamWriter類
或StringReader和StringWriter類
TextReader類及其派生類常用方法:
Close(關閉讀取器并釋放系統資源)、Read(讀取下一個字符,如果不存在,則返回-1)、ReadBlock(讀取一塊字符)、ReadLine(讀取一行字符)、ReadToEnd(讀取從當前位置直到結尾的所有字符)
TextWriter類及其派生類常用方法:
Close (關閉編寫器并釋放系統資源) 、Flush(清除當前編寫器的所有緩沖區,使所有緩沖數據寫入基礎設備)、Write(寫入文本流)、WriteLine(寫入一行數據)
ASP.NET簡介
ASP.NET是一種動態網頁設計技術,它比其他任何一種動態網頁設計技術更容易使用。它是一種可升級的Web應用程序開發技術,特別擅長于用戶交互和數據處理。
ASP.NET不是程序設計語言,是建立在.NET Framework基礎之上的程序設計框架,它用來創建Web應用程序。
ASP.NET的語法與ASP 兼容,但ASP 應用程序不能直接在ASP.NET環境下運行,需要適當修改。
ASP.NET與ASP的最大區別在于:前者是編譯型的動態網頁技術,而后者是解釋型的動態網頁技術。
ASP.NET比較流行的版本是1.1版、2.0版和3.0版。與Visual Studio.NET 2003一起發布的ASP.NET是1.1版,與Visual Studio.NET 2005一起發布的ASP.NET是2.0版。在2007年與Visual Studio.NET 2008一起發布的ASP.NET是3.0版。
ASP.NET的優勢
可管理性 好
安全性 高
易于部署
性能較ASP和JSP來說大大增強
具有靈活的輸出緩存技術
使用Unicode編碼,實現了國際化
支持移動設備
擴展性和可用性 好
提供跟蹤服務和調試功能
集成于.NET Framework之中,功能強大
數據庫連接使用ADO.NET技術
設計Web應用程序的一般步驟
利用VS 2005設計Web應用程序的操作步驟
S1:新建網站
S2:設置網站位置
S3:添加網頁
S4:設計Web窗體
S5:設置窗體及窗體控件的屬性
S6:編寫程序
S7:執行Web應用程序
S8:查看運行結果
注意,詳細情況請參見教材
(1) 生成Web應用程序
操作方法:在Visual Studio .NET 2005的解決方案資源管理器窗口中,右擊網站名并選擇“生成網站”
(2) 檢查Web服務器是否正常
如果要發布到本地計算機,則必須檢查本地計算機是否安裝了IIS
檢查IIS是否正常工作
表、記錄和字段
關系數據庫系統采用關系模型作為數據的組織方式。
表是按某一公共結構存儲的一組相似數據,類似于日常生活中的表格。
表按行列方式將相關的信息排列成邏輯組。表中的每一行稱為記錄。
列稱為字段
數據庫
數據庫將數據表表示為多個表的集合,通過建立表之間的關系來定義數據庫的結構
所謂主鍵是指用來惟一標識表中記錄的一個或一組字段。主鍵不允許有重復值。
外鍵是指用來連接另一個表、并在另一表中為主鍵的字段。
索引
在關系數據庫中,通常使用索引來提高數據的檢索速度。
記錄在表中是按輸入的物理順序存放的,當為主鍵或其它字段建立索引時,數據庫管理系統將索引字段的內容以特定的順序記錄在一個索引文件上。
檢索數據時,數據庫管理系統先從索引文件上找到信息的位置,再從表中讀取數據。
每個索引都有一個索引表達式來確定索引的順序,索引表達式既可是一個字段,也可是多個字段的組合。
可以為一個表生成多個索引,每個索引均代表一種處理數據的順序。
關系
關系數據庫的最大好處就是能夠避免數據的不必要的重復,即可以將包含重復數據的表拆分成若干個沒有重復數據的簡單表,并通過建立表與表之間的關系來檢索相關表中的記錄。
在表與表的關系中,習慣上稱主表為父表,而通過關系連接的其他表為子表。
表與表之間可能會有4種關系
一對一關系:指父表中的記錄最多只與子表中的一條記錄相匹配,反之亦然;
一對多關系:指父表中的記錄與子表中的多條記錄有關。例如,對于客戶表和訂單表來講,每個訂單只與一個客戶有關,而每個客戶可以有多個訂單,因此客戶表和訂單表是一對多的關系;
多對一關系:與一對多是互補的,即父表中的多條記錄與子表中的一條記錄相關;
多對多關系:指父表中的多條記錄與子表中的多條記錄有關。
SQL簡介
SQL(Structured Query Language)語言是一個綜合的、通用的關系數據庫語言,其功能包括查詢、操縱、定義和控制。
目前,SQL標準有3個版本。
SQL-89
SQL-92
SQL3
Microsoft SQL Server使用的Transact-SQL是在SQL-92標準基礎上擴充而來的。
SQL的構成
SQL由命令、子句和運算符等元素所構成的,這些元素結合起來組成用于創建、更新和操作數據的語句。
SQL命令分兩大類DDL(數據定義語言)命令和DML(數據操縱語言)命令。DDL命令用于創建和定義新的數據庫、字段和索引,主要包含語句:create、drop、alter。DML命令用于創建查詢,以便從數據庫中排序、篩選和抽取數據,主要包含語句:select、insert、update、delete。 P258
SQL子句用于定義要選擇或操作的數據。
select語句
select語句的功能是從現有的數據庫中檢索數據。
from子句指定數據的來源,即指出記錄來自哪些表。
where子句指定選擇記錄時要滿足的條件。
group by 子句對記錄分組。
having子句確定在帶group by子句的查詢中具體顯示哪些記錄,可以用having子句來顯示滿足指定條件的分組。
order by子句對記錄排序。
語句示例見P258-260
delete語句
delete語句的功能是刪除from子句列出的、滿足where子句條件的一個或多個表中的記錄。
如:
delete from Orders Where OrderId=16
insert語句
insert語句用于添加記錄到表中。
如:
insert into Orders
(CustID,ProductID,OrderDate,SendDate,Qty)
values(‘2’,’5’,’2008-8-12’,’2008-8-13’,1)
update語句
update語句按某個條件來更新特定表中的字段值。
如:
update Products set Price=8900 where Products.ProductId=3
ADO.Net概述
ADO.NET是一種Microsoft最新、最強大的數據庫訪問技術,應用程序通過ADO.NET可以非常方便地訪問并處理存儲在各種數據庫中的數據。
ADO.NET聚集了很多進行數據處理的類,這些類有強大的對數據訪問、處理的功能,如索引、排序、瀏覽和更新。
ADO.NET集成在.NET Framework中,可以用于任何支持.NET的計算機語言,如C#。
ADO.NET主要包括與System.Data命名空間及其嵌套的命名空間,以及system.Xml命名空間等一些與數據訪問有關的專用類。
Data Provider
Data Provider提供了DataSet和數據庫之間的聯系,同時也包含了存取數據庫的一系列接口。通過數據提供者所提供的應用程序編程接口(API),可以輕松地訪問各種數據源的數據。
.NET數據提供程序包括以下幾個:
SQL Server .NET 數據提供程序,用于Microsoft SQL Server 數據源,來自于System.Data.SqlClient 命名空間;
OLE DB .NET 數據提供程序,用于OLE DB 公開的數據源數據源,來自于System.Data.OleDb 命名空間;
ODBC.NET 數據提供程序,用于ODBC 公開的數據源來自于System.Data.Odbc 命名空間;
Oracle .NET 數據提供程序用于Oracle 數據源,來自于System.Data.OracleClient 命名空間。
Data Provider
.NET Data Provider有4個核心對象:
Connection對象用于與數據源建立連接;
Commmand對象用于對數據源執行指定命令;
DataReader對象用于從數據源返回一個僅向前的(forward-only)只讀數據流;
DataAdapter對象自動將數據的各種操作變換到數據源相應的SQL語句。
DataSet
ADO.NET和核心組件是DataSet。
可以將DataSet想像成內存中的數據庫,它是不依賴于數據庫的獨立數據集。獨立是指即使斷開數據連接或關閉數據連接,DataSet依然可用。
在ADO.NET中,DataSet是專門用來處理從數據源獲得數據,無論底層的數據是什么,都可以使用相同的方式來操作從不同數據源取得的數據。
DataSet內部是用XML來描述數據的。XML是一種與平臺無關、數據無關且能描述復雜數據關系的數據描述語言。
ADO.NET操作數據庫的流程
首先使用Connection對象連接數據庫;
如果執行不需要返回結果的數據庫執行命令或存儲過程,可以使用Command對象;
DataReader對象用于從數據源中讀取僅向前和只讀的數據流。
DataSet是數據的內存駐留表示形式,它提供了獨立于數據源的一致關系編程模型。DataSet表示整個數據集,其中包含表、約束和表之間的關系。
與現有數據源的交互通過 DataAdapter 來控制。DataAdapter對象用于從數據源中獲取數據、填充DataSet中和表和約束并將對DataSet的更改提交回數據源。
使用Connection對象訪問數據庫
連接數據庫步驟
(1)定義連接字符串
使用SQL Server身份驗證:
Data Source=服務器名;Initial Catalog=數據庫名; User ID=用戶名;Pwd=密碼
使用Windows身份驗證:
Data Source=服務器名;Initial Catalog=數據庫名;
Integrated Security=True
(2)創建 Connection 對象
SqlConnection connection = new SqlConnection(connString);
(3) 打開與數據庫的連接
connection.Open( );
使用Command對象訪問數據庫
使用 ExecuteNonQuery() 的步驟:
(1)創建 Connection 對象;
(2)定義sql 語句;
(3)創建 Command 對象;
(4)執行 ExecuteNonQuery() 方法;
(5)根據返回的結果進行處理。
關于C#中的概念介紹就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果喜歡這篇文章,不如把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。