首頁  >  文章  >  後端開發  >  C#中關於概念系統的總結

C#中關於概念系統的總結

黄舟
黄舟原創
2017-05-07 10:27:422647瀏覽

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.7 e308精度為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. 复合赋值运算符
+=、-=、*=、/=、%=、&=、|=、^=、c1416f47236dd7b5b9b6ea098534dc8d>=
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
對話方塊 ColorD ialog、FontDialog、OpenFileDialog、PrintDialog、PrintPreviewDialog、FolderBrowerDialog、SaveFileDialog
指令 Button、LinkLabel、Button 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 鍵順序TabS
top 指示使用者能否使用Tab 鍵將焦點放到該控制項上。 Text 與此控制項關聯的文字
Top 控制項上邊緣與其容器的工作區上邊緣之間的距離(單位:像素)
Visible 指示是否顯示該控制項
Width 控制項的寬度
按鈕控制項
Button(按鈕)控制項位於.NET Framework的System.Windows.Forms命名空間,它是從基底類別ButtonBase派生的。基類ButtonBase用於實現按鈕控制項所需的基本操作。


Button控件是一種常用控件,在需要使用者做「確定」或「取消」之類的選擇,通常都會使用Button控件。 Button控制支援滑鼠的點選和雙擊操作,也可以用148abe006775c52e28d07bbe171fd752鍵來操作。
在設計時,通常在窗體上添加控件,然後雙擊它,為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接收與鍵對應的字元
KeyPressKeyUp?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左邊就會出現一個頁邊距,方便選擇文字###Undo###Action###Name### ###取得呼叫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(磁碟機或USB)等 
目錄
.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是一種動態網頁設計技術,它比其他任何一種動態網頁設計技術更容易使用。它是一種可升級的網路應用程式開發技術,特別擅長於使用者互動和資料處理。
ASP.NET不是程式設計語言,是建立在.NET Framework基礎之上的程式設計框架,它用來建立網頁應用程式。
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#中關於概念系統的總結的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn