C#速學

第一章css

 

一、.NET是平臺,C#是.NET上的一門語言。node

二、C#的異常處理機制:try  catch  finally程序員

         Try  引起異常  catch捕獲異常    finally   釋放資源算法

三、catch  finally(錯誤)sql

問題:.NET  Framework由什麼組成?數據庫

答:有公共語言運行時(CLR)和.NET Framework基類庫(FCL)這兩大組件組成。數組

 

第二章  類、對象、方法緩存

 

一、什麼是類:具備類似特性(屬性)和行爲(方法)的對象的集合。安全

二、什麼是對象:在現實世界中存在的,而且看得見摸得着的一切事物。服務器

三、類與對象之間的關係:一對多的關係。類是對象的藍圖。

四、面向對象的三大特性:封裝、繼承、多態。

         封裝:隱藏內部實現,穩定外部接口。

         繼承:子類繼承父類的全部成員,實現代碼的複用。

         多態:不一樣的子類對於同一個消息作出的不一樣一種反映。

五、類的訪問修飾符:public(公共的)   Intermal(默認的訪問修飾符)

   成員訪問修飾符:

public

容許類的使用者從外部進行訪問

private

C#中的私有成員公限於類中的成員能夠訪問,從類的外部訪問私有成員是不合法。

protected

爲了方便派生類的訪問,有但願成員對於外界隱藏的,這時可使用protected修符聲明成員爲保護成員。

intemal

對於同一應用程序是能夠訪問的。

六、類中分爲兩種成員:成員變量(字段,屬性),成員函數(方法)

   屬性的做用:一、封裝字段,爲字段提供有效的數據驗證。

                              二、爲其餘類提供一個外部的訪問接口。

屬性的分類:只讀屬性、只寫屬性、可讀可寫屬性。

七、方法的分類:實例方法、靜態方法、構造方法(構造函數)

         實例方法:當一個類被實例化後,經過類的實例(對象)調用的方法。

         靜態方法:當直接經過類名調用的方法。靜態方法中只能包含靜態成員變量。

         構造方法:當類的實例(對象)被建立的過程當中,所調用的方法稱爲構造方法。

                  特色:構造方法與類名相同,且沒有反回類型。

八、重載和重寫的概念:

重寫(override)

在面向對象中從新實現父類的虛方法或者抽象對象方法,經過override關鍵字來重寫體現面向對象的多態性。重寫又稱覆蓋。

重載

同一類中添加幾個方法名字相同,參數個數或者參數類型不一樣的方法,稱爲重載,重載與方法的返回類型無關。

 

第三章 static、構造函數

一、八大基本數據類型:

類型:

 

數據類型

所佔字節數

整型

int

4字節

Byte

1字節

Short

2字節

long

8字節

浮點型

Double

 

Float

 

字符型

Char

 

String

 

布爾型

Boolean

 

二、const:常量是在字段定義時初始化,是靜態賦值。

   Readonly:只讀的變量,能夠在字段初始化或構造函數中動態賦值。

   注意: const與readonly不能同時存在。

三、構造函數的概念:函數的名字與類名相同,而且沒有返回值,這樣的函數稱爲構造函數

構造函數的做用:

(1)初始化字段或屬性;

(2)用於建立對象。

四、析構函數的概念:用~開頭,函數名和類同名,函數沒有訪問修飾符,函數沒有參數,這樣的函數稱爲析構函數

如:~類名(){}

析構函數的調用規則:

(1)       一個類只能有一個析構函數

(2)       析構函數沒有訪問修飾符,沒有參數

(3)       析構函數由C#程序自動調用,程序員不能調用

(4)       析構函數的做用:用於回收無用的對象所佔用的內存空間

 

比較構造函數和析構函數調用時間和調用頻率

實例

構造函數

在建立類的每一個新實例時調用一次

析構函數

在每一個實例被銷燬前調用

靜態

構造函數

只調用一次,在類的任意靜態變量第一次被訪問以前,或在類的任何實例被建立以前,不管二者誰先發生。

析構方法

不存在,只有實例纔有析構方法

五、C#中數據類型分類:值類型、引用類型。

值類型:將實際的值保存在內存的棧中。

引用類型:經過指針指向內存棧中實際值的地址。引用類型的自己保存在堆中。

String sl=null;//空引用

Sl=」」;//空值

六、關鍵字this公在構造函數、類的方法和類的實例中使用,主要有如下含義:

         (1)出如今類的構造函數中的this,表示正在構造的對象自己的引用

         (2)出如今類的方法中的this,表示對調用該方法的對象的引用。

第四章   索引器、枚舉、結構

一、定義索引器的語法

   訪問修飾符  返回類型  this[數據類型 標識]

{

    Get{return 內容;}

     Set{}

}

   注意:

(1)       get{}訪問器中,return後的內容的類型要和定義索引的返回類型一致;

(2)       索引器通常用在將對象做爲數組的狀況;

(3)       [數據類型  標識]數據類型根據具體狀況進行定義;

(4)       根據[]中的不一樣數據類型根據具體狀況進行定義;

(5)       索引器相似於屬性,能夠根據下標訪問元素,也包含get{}和set{}訪問器;

(6)       索引器也相似於數組,能夠根據下標訪問元素,但索引器比數據更靈活,數據元素只能根據下標訪問,索引器還能夠根據其餘類型進行訪問。

二、枚舉(enum)是一個指定的常數,其基礎類型能夠是任何整型,若是沒有顯示聲明基礎類型,則用int。

枚舉是值類型的一種特殊形式。

枚舉的限制:

(1)       不能定義本身的方法;

(2)       不能實現接口;

(3)       不能定義屬性或索引。

三、結構(struck)是程序員自定義的數據類型,很是相似於類

   語法:struck  結構名稱

   {

                  //結構成員;

}

 

第五章   繼承、多態

一、在C#繼承中,若是子類繼承父類,那麼子類就必須繼承父類的構造函數。若是父類沒有默認構造函數,那麼子類就必須顯示調用父類帶參的構造函數。

二、在C#中,若是子類繼承父類,在實例化子類的時候,首先執行父類的構造函數,再執行子類的構造函數。

三、在C#繼承中,父類能夠派生多個子類,子類只能直接繼承一個父類,繼承具備傳遞性以及單根性的特色。

四、建立子類對象時,程序先調用父類無參的構造方法,再調用子類本身的構造方法,不管子類的構造方法是否有參數,始終調用父類無參的構造方法。

五、注意:      

(1)       base關鍵字表示調用父類的構造方法;

(2)       base(參數1,參數2,……)中的參數只有參數名,沒有數據類型;

(3)       根據base()中的參數個數決定調用父類的哪一個構造方法;

(4)       base(參數1,參數2,……)中的參數名要和子類([參數……])中的參數名相同。

六、繼承的特色:單根性和傳遞性。

七、is檢查對象是否與指定類型兼容。

   as用於在兼容的引用類型之間執行轉換。

 

第六章  抽象類、接口

一、抽象類(abstract):在C#中經過關鍵字abstract定義的類稱爲抽象類。

二、抽象類主要用於類的藍圖或模版。

三、抽象類(abstract)的特色:

(1)       抽象類中既包含抽象方法又包含實例方法;

(2)       有抽象方法的類必定是抽象類;

(3)       抽象類能夠被繼承,可是不能被實例化;

(4)       抽象類通常做爲基類,子類繼承抽象類,必須實現抽象類中的抽象方法;

(5)       抽象類不能是密封類或靜態類。

   抽象方法:只能定義沒有實現的方法稱爲抽象方法。

   有抽象方法的類必定是抽象類。

   當子類繼承的父類是一個抽象類時,子類要麼實現父類中全部的抽象方法,要麼將本身也聲明爲抽象類,子類重寫父類的抽象方法時,必須使用關鍵字override。

   抽象類的做用:強制約束子類的行爲。

四、密封類(sealed):用關鍵字sealed定義的類爲密封類。

   密封類的特色:

(1)       類中不能有虛方法;

(2)       密封類不能被其它類繼承。

   string是密封類,因此不能被繼承。

五、虛方法(virtual):在C#中默認的方法形式都是非虛方法。若是父類的方法被定義爲虛方法,那麼子類就能夠經過override重寫父類的虛方法,不然子類將隱藏(new)父類的方法。

六、接口:接口是單純對事物行爲的描述。

   接口的做用:實現多重繼承。

   接口的特色:爲了C#中繼承單根性的擴展。

   子類繼承父類,能夠實現多個接口。

   接口中包含的內容:屬性、方法、索引器、事件。

七、類實現接口的語法:類名:接口名{類成員、方法}。

   注意:當類實現接口時要實現接口中的全部方法。

八、接口的默認修飾符是public,並且public不須要顯示的定義,也不能修改爲其它修飾符

   注意:

1)  接口能夠繼承接口,當類實現的接口繼承於其它接口時,類須要實現子接口和父接口中的全部定義內容。

2)  父類實現接口中的方法時將方法定義爲虛方法,子類繼承父類時用override關鍵字重寫父類的方法,接口中的方法子類就不須要再實現。

 

比較類與結構的區別

a)       類中字段能夠有初始值,結構中字段不能夠有初始值。

b)       類中能夠包含默認構造函數,結構中不能有顯示定義的默認構造函數,結構體中帶參數構造函數,可是構造函數中的參數必須爲全部字段賦值。

c)       類屬於引用類型,結構屬於值類型。

d)       類能夠被繼承,結構不能被繼承。

e)       類必須實例化,結構能夠實例化也能夠不實例化

 

虛方法與抽象方法的區別

 

虛方法

抽象方法

用virtual修飾

用abstract修飾

要用方法體,哪怕是一個分號

不容許有方法體

能夠被子類override(重寫)

必須被子類override(重寫)

除了密封類均可以寫

只能在抽象類中

 

抽象類與接口的區別

 

抽象類

接口

不一樣點

用abstract定義

用interface定義

只能繼承一個類

能夠實現多個接口

非抽象派生類必須實現抽象方法

實現接口的類必須實現全部成員

須要override實現抽象方法

直接實現

類似點

不能被實例化

包含未實現的方法

派生類必須實現未實現的方法

 

第七章  ListView 和TreeView

 

TreeView中的經常使用屬性的方法:

屬性 

一、 nodes:獲取TreeView控件的全部節點集合,返回一個treenodecollection,表示此控件的樹節點集合。

二、 SelectNode:獲取或設置當前在樹視圖控件中選定的樹節點。

三、 ShowNodeTooltips:獲取或設置一個值,當鼠標縣停在TreeNode上時顯示工具示。

TreeView.Node返回的是Treenodecollection類型。

 

Treenodecollection屬性:

一、 count:獲取TreeNode中對象的總數。

TreeNodeCollection方法:

一、 Add()向集合中添加新的樹節點。

二、 Clear()刪除全部樹節點。

TreeView中每個節點表示一個TreeNode對象

TreeNode經常使用屬性和方法:

Level屬性:獲取TreeView控件中樹視圖的深度。

Nodes屬性:獲取當前樹節點的TreeView對象的集合。

ToolTipText和ShowNodeToolTips的區別:

方法:

Collapse():摺疊TreeNode

CollapseAll():摺疊全部的樹節點。

Expand():展開樹節點。

ExpandAll():展開全部子樹節點。

GetNodeCount():返回子樹節點的數目

 

 

AfterSelect事件:選定樹節點時觸發。

 

建立TreeView實例

//建立根節點

TreeNode root=new TreeNode(「根節點名」);

//建立子節點

TreeNode node=new TreeNode(「子節點名」);

//將子節點添加到根節點中

Root.Nodes.Add(node);

//將根節點添加到TreeView控件中

TreeView.Node.Add(root);

 

 

TreeNode對象用於建立節點

節點對象名1.Nodes.Add(節點對象名2)——節點對象名2是對象名1的子節點

節點對象名1.Text——給節點設置文本

注意:TreeView中只需添加根節點

 

ExpandAll()方法展開全部節點

 

SelectedNode屬性獲得是選中的TreeNode對象

Level屬性獲得一個節點的深度(層次),根節點的深度是0,以此類推。

 

ListView經常使用屬性及方法

屬性:

View:設置或獲取項在控件中的顯示方式。

FocusedItem:獲取或設置當前具備焦點的控件的項。

Items:獲取包含控件中全部項的集合。

Columns:獲取控件中顯示的全部列標題的集合。

SelectedItems:獲取控件中當前選中的項。

FullRowSelect:制定時某一項仍是某一項所在的行。

ListViewItem:屬性的方法

SubItems:獲取包含該項的全部子項的集合。

Text:獲取或設置項的顯示文本。

ToolTipText:獲取或設置當鼠標停留在ListViewItem上時顯示的文本。

ListView經常使用的方法:

Clear:刪除ListView中的全部的項。

 

建立ListView的實例:

//清空原有項

ListView1.Items.Clear();

//建立ListView對象

ListViewItem item=new ListViewItem(「集點項數據」);

//添加子項

Item.SubItems.Add(「子項數據」);

//向ListView中添加項

ListView1.Items.Add(item);

 

第八章  委託與事件

委託的定義:委託是一種引用方法的類型。一旦爲委託分配了方法,委託將與該方法具備徹底相同的行爲。委託方法的調用能夠像其餘任何方法同樣,具備參數的返回值,委託方法將方法做爲參數進行引用。

語法:

訪問修飾符  delegate  返回值類型 委託名();

委託不能被繼承和重載。

委託的簽名:由返回類型和參數值組成。

 

將方法委託給對象的實現步驟:

(1)   定義委託:訪問修飾符  delegate 返回值類型 委託名();

(2)   定義類,在類中定義方法:

class 類名

{

    訪問修飾符  返回值類型 方法名1(){……}

訪問修飾符  返回值類型 方法名2(){……}

訪問修飾符  返回值類型 方法名3(){……}

}

(3)   建立類的對象:類名  對象名 =new 類名();

(4)   建立委託對象:

方法一:委託名  委託對象名=new 委託名(對象名.方法名());

方法二:委託名  委託對象名=對象名.方法名;

注意:方法後不要帶();

(5)(可選步驟)給委託對象委託多個方法

     如:委託對象名+=對象名.方法名2;

(6)調用委託對象:如

      委託對象名();

例:委託的實例:

//定義一個無參無返回值的委託

public delegate void Hello();

//建立委託對象

HelloDel del=new HeelDel(方法名);

//在測試爲中調用委託

Del();

 

注意:委託對象名後必定要跟();

      委託名、類名、方法名一、對象名、委託對象名均由程序員定義

匿名方法:

語法:

Delegate  參數弄表  {語句塊}

匿名方法實例

//定義委託

Delegate  void Hello()

//經過匿名方法建立委託對象

Hello hello=delegate()

{

    Console.WriteLine(「hello!」);

}

//調用委託

Hello();

 

 

練習:使用委託,輸出本週和下週的學習安排

將方法給委託對象的規則:

(1)   委託的參數類型要和方法的參數類型一致。

(2)   能夠委託多個有返回值的方法,但委託對象的返回值是最後一個方法的返回值

(3)   +=表示添加要委託的方法,-=表示去掉已經委託的方法。

練習:定義委託,執行接收一個數字,返回該數字的立方的方法。

 

事件

事件是類在發生其關注的事情時用來提供通知的一種方式。

一、 委託是事件的基礎,事件返回委託的類型。

二、 定義事件的語法:

訪問修飾符  event  委託名 事件名;

使用事件的步驟:

1) 定義委託,如:訪問修飾符  delegate  返回值類型 委託名();

2) 定義觸發事件的類及方法,如:

 

class 類名1

{

    //定義事件

    訪問修飾符 event 委託名  事件名;

    //定義方法調用事件

    訪問修飾符  返回值類型  方法名1()

    {

        [//代碼部分]

        //調用事件

        事件名();

}

}

 

 

 

3) 定義響應事件的類及方法,如:

class  類名2

{

    //定義方法響應事件

    訪問修飾符  返回值類型  方法名2()

    {

        //代碼部分

}

}

 

4) 訂閱事件,如:

//建立響應事件類的對象

    類名2  對象名2=new 類名2();

//將類中方法給委託

委託名  委託對象名=對象名.方法名2;

//建立角發事件類的對象

    類名1  對象名1=new 類名1();

//將委託加載到事件

    對象名1.事件名+=委託對象名;

//調用角發事件的方法

    對象名1.方法名1();

this.button1.Click+=new System.EventHandler(this.button1_Click);

注意:委託事件的基礎。

 

事件的事例:

//定義委託

Public delegate void del();

//定義事件

public event del eve;

//定義角發事件的方法

public void begin()

{

    Console.WriteLine(「處理。」);

}

//定義訂閱事件的方法

public void DingYue()

{

    eve+=new del(chuli);

}

 

 

 

 

第十章   文件操做

 

File 類——操做文件,是一個靜態類

    主要提供用於建立、複製、刪除、移動和打開文件的靜態方法,其更側重於對文件的操做。

File類是一個密封類,不能被繼承。其全部成員皆是靜態的,能夠不要建立實例

File類的經常使用方法

 

Create(路徑及文件名.後綴)——建立文件

delete(路徑及文件名.後綴)——刪除文件

exists(路徑及文件名.後綴)——判斷文件是否存在,存在返回true,不存在返回false。

copy(源文件路徑,目標文件路徑)——複製文件

move(源文件路徑,目標文件路徑)——移動文件(至關於剪切和粘貼)

OpenWrite(路徑及文件名.後綴)——以寫入的方式打開文件

 

練習:在E盤下建立文件:學習計劃.txt,而後將文件移動到D盤,再判斷D盤下是否存在該文件,若是存在,將文件刪除。

 

建立文件的實例:

//聲明一個變量,存儲路徑

string path=@「E:\test.txt

//判斷文件是否存在

if(File.Exists(path))

{

    //若是存在則刪除

    File.Delete(path);

}

else

{

    //建立文件

    File.Create(path);

}

 

//向文件中寫入內容的操做步驟

(1)   打開文件(能夠判斷,若是文件不存在則先建立,若是存在則以寫的方式打開);

(2)   將要寫進文件的內容用字節數組保存;

(3)   調用文件流的Write()方法將內容寫進文件;

(4)   關閉文件流。

 

用FileStream向文件中寫入內容的實例:

//建立一個文件流

FileStream fs=null;

//建立一個FileStream對象

fs=new FileStream(「E:\test.text」,FileModel.OpenOrCreate);//使用指定的路徑和建立模式初始化

 

FileStream類的新實例。

將字符串按UTF8的編碼方式轉換爲字節數組:

byte[] array=new UTF8Encoding(true).GetBytes(「內容」);

Encoding.Default.GetBytes(內容)——使用系統默認的字符集將內容轉換成字節數組

 

////寫入內容

fs.write(「寫入的內容」,0,「寫入字節長度」);緩衝區讀取的數據將字節塊寫入該流,0:從零開始的字節偏一,今後處開始將字節複製到當前流。

//清空緩衝區

fs.flush();

//關閉流

fs.Close();

 

 

從文件中讀取內容的操做步驟:

(1)   打開文件(能夠判斷文件是否存在)

(2)   定義字節數組

(3)   調用文件流的Read()方法,將文件中的內容讀取到字節數組

(4)   將字節數組轉換後輸出

(5)   關閉文件流

 

練習:向E盤下的「學些計劃.txt」文件寫入學習計劃,而後讀取學習計劃,在控制檯中打印

 

FileInfo類:提供建立、複製、刪除、移動和打開文件的實例方法,FileInfo類屬於sealed密封類,不能被繼承。

FileInfo類的經常使用屬性

l  Exists                 判斷該文件是否存在

l  Length                 文件的大小

l  Name                    文件名

l  FullName                文件的完整路徑

l  IsReadOnly             是否爲只讀

l  Creationtime            當前文件的建立時間

l   

Directory類:提供用於建立、移動、刪除目錄和子目錄的靜態方法

l  Delete                  刪除目錄及其內容

l  Exists                  判斷目錄是否存在

l  GetCurrentDirectory     應用程序的當前工做目錄

l  GetDirectories          指定目錄中子名稱

l  GetFiles                指定目錄的文件名稱

l  Move                    將目錄移動新的位置

DirectoryInfo類:提供了用於建立、移動、刪除目錄和子目錄的實例方法

l  Create                  建立目錄

l  delete                  刪除DirectoryInfo及其內容

l  GetDirectories          指定目錄中子目錄的名稱

l  GetFiles                指定目錄中的文件名稱

l  MoveTo將DirectoryInfo  實例及其內容移動到新位置

File類靜態類,FileInfo密封類

使用建議:

(1)   若是須要對文件進行屢次操做,應FileInfo類,由於在建立對象時就指定了正確的路徑,File中的方法大可能是靜態的,每次都須要從新尋找文件,會花費更多資源。

(2)   若是公操做文件一次,應使用File類,直接調用方法,無需建立對象。

個人問題:WinForm中的文件與Java中有何區別?

 

 

第十一章 集合與泛型

泛型:List<T>

T表示任意數據類型,用來約束添加到集合中的內容

 

ArrayList

List<T>

不一樣點

能夠添加任何元素,添加元素時裝箱,讀取元素時拆箱。

添加元地有類型的約束,無需裝箱和拆箱。

相同點

能夠動態的添加、刪除元素,使用索引引訪問元素。

注意:使用ArrayList的地方都可以用Lit<T>代替。

 

 

HashTable

Dictionary<KT,VT>

不一樣點

能夠添加任何元素,添加時裝箱,讀取時拆箱

添加的元素有類型約束,無需裝箱、拆箱。

相同點

動態的添加、刪除元素,根據鍵訪問元素。

 

泛型集合細解:

Array:

    Array是全部數組類的基類

    建立一個數組的語法:Array a=Array.CreateInstance(typeOf(指定數據類型),大小);

a.Length;數據元素的個數

a.SetValue();給數組元素賦值

a.GetValue();從數組中取得指定下標的元素

a.Sort();給數組元素排序

a.Reverse();翻轉原有數組元素

    ……

ArrayList:

    ArrayList(列表集合)是經常使用的集合類型,他能夠動態添加、刪除元素,其大小能夠動態變化,他把全部元素都當成object對象引用,所以訪問ArrayList元素時要進行類型轉換。

    構造函數:

(1)   默認構造函數:ArrayList arrayList=new ArrayList();

(2)   添加指定數組到集合中的構造方法:ArralList arrayList=new ArrayList(arrayName);

arrName:數組名字

(3)   使用指定大小初始化內部大小的數組構造函數:ArrayList arrayList=new arrayList(n);

n:指定的初駘大小。

    添加元素:

        Add();該方法將對象添加到ArrayList集合的末尾處。

        Insert();該方法用於將元素插入ArrayList集合的指定索引處。

        InsertRange();該方法用於將一個數組插入ArrayList集合的指定索引處

    刪除元素:

        Remove();該方法用於將指定名稱的元素從集合中移除

        RemoveAt();該方法用於將指定索引處的元素從集合中移除。

        RemoveRange(int index,int count);該方法用於從集合中移除必定範圍的元素

                        index要移除的元素從0開始的索引

                        count要移除的元素的個數

        Clear();該方法用於從集合中移除全部的元素。

    搜索元素:

        Contains();該方法用於肯定指定名稱的元素是否在集合。

        IndexOf();該方法與string字符串類的同名方法用法做用基本相同

    HashTable:

        HashTable(哈希表)是System.Collections命名空間提供的一個集合,能夠將數據做爲一組鍵/值對來存儲,它的每一個元素都是一個存儲在DictionaryEntry對象中的鍵/值對。鍵不能爲空,區分大小寫,不能重複;值能夠爲空,可重複。

    構造函數:

(1)   默認構造函數:HashTable ht =new hashTable();

(2)   使用指定初始容量、默認加在子、默認哈希代碼提供程序和默認比較器初始化HashTable類的新的空實例:HashTable ht=new HashTable(int 初始大小);

添加元素:

        Add(object Key,object value);將帶有鍵、值的元素添加到HashTable中

刪除元素:

        Clear();將HashTable中全部元素移除。

        Remove();將HashTable中帶有指定鍵的元素移除。

搜索元素:

        ContainsKey();確認是否含有指定鍵。

        ContainsValue();確認是否含有指定值。

泛型:

    泛型一個主要優勢是性能,泛型的目標是採用普遍適用的和可交互性的形式來表示算法和數據結構,以使他們能直接用於軟件構造。泛型能在編譯時提供強大的類型檢查,減小數據類型之間的顯示轉換,裝拆箱操做和運行時的類型檢查,能夠強化類型的集合,提升性能。

List<T>

    ArrayList是一個很方便的集合類,但添加的其中的任何引用或值類型都將隱式轉換爲Object類型,強制轉換以及裝拆箱操做都會下降性能。與ArrayList相比,List<T>比它更安全而且速度更快,特別適合列表項是值類型的狀況。

    構造函數:

        默認構造函數:List<T> list=new List<T>();該實例爲空而且具備默認初始容量

        List中,有添加、刪除、插入元素的方法,與ArryList的方法相似,在肯定是要使用List仍是ArrayList的時候,最好使用List。

 

 

 

第十三章  序列化和反射

 

序列化:將對象轉換成可存儲格式的過程稱爲序列化。

反序列化:將文件中的內容生成對象的過程稱爲反序列化。

 

序列化的步驟:

(1)   建立要保存的內容:字符串、集合對象、泛型集合對象、對象數組……

(2)   建立文件流:FileStream fs=new FileStream(「路徑」,「打開方式」);

(3)   建立序列化對象:BinaryFormatter bf=new BinaryFormatter();

(4)   調用方法,將內容保存到文件中: bf.Serialize(fs,內容);

(5)   清空緩存:fs.Flush();

(6)   關閉流件流:fs.Close();

反序列化的步驟:

(1)   建立文件流:FileStream fs=new FileStream(「路徑」,「打開方式」);

(2)   建立序列化對象:BinaryFormatter bf=new BinaryFormatter();

(3)   調用方法,將讀取的內容保存到對應類型的以象中:

數據類型 變量名/對象名=(數據類型)bf.Deserialize(fs);

     (4)   清空緩存:fs.Flush();

     (5)   關閉文件流:fs.Close();

     (6)   輸出變量/對象中的內容。

 

三 層

三層結構:(3W1H)

(一)問題:

一、 什麼是三層?

二、 爲何要使用三層?

三、 在哪兒用三層?

四、 怎樣搭建三層?

五、 有哪三層?

                                                                      

三層在生活中的案例:客戶去茶館吃飯,呼叫服務員點菜,服務員將菜單交給廚師作菜,廚師將作好的菜傳遞給服務員,服務員交給客戶。

 

(二)三層分爲:UI(表示層,User Interface)

                BLL(Business Logic Layer  業務邏輯層)

                DAL(Data Access Layer   數據訪問層)

(三)三層的依賴關係:

一、 數據訪問層依賴於實體層與數據訪問接口。

二、 業務邏輯層依賴於實體層與數據訪問層。

三、 表示層依賴於實體層與邏輯層。

(四)三層的職責

  1. 數據訪問層:提出數據庫中的數據,對數據進行增、刪、改操做。
  2. 業務邏輯層:提取數據訪問層中的數據,對數據進行業務功能上的篩選與驗證。
  3. 表示層:爲客戶提供人機交互的界面。

(五)三層的做用:分工明細,有利於軟件的可維護性與可擴展性。

 

一條記錄,對應一個實體類,一張表的記錄就對應一個泛型集合。

一個表的增刪改操做都保存在DAL類中。

一個業務功能點的實現都須要在BLL類中篩選與驗證,BLL中不包含任何的數據庫操做語句。

 

 

 

QUESTION AND ANSWER

1、imageKey和imageIndex的區別?

    imageKey:獲取或設置爲該項顯示的圖像的鍵。

    imageIndex:獲取或設置爲該項顯示的圖像的索引。

2、什麼是重寫和重載?

重寫:在面向對象中,子類繼承父類,子類將父類的抽象方法具體實現或從新實現父類中的虛方法的過程。

    重載:方法名相同,參數個數、順序、類型不一樣。重載與方法的返回類型無關。

3、異常關鍵字解釋

    try:監控代碼

    catch:捕獲異常

    finally:釋放資源,始終都會執行

4、類的默認訪問修飾符?類的訪問修飾符能不能是私有的?

    默認的訪問修飾符是:internal。類的訪問修飾符不能是私有的,它只有public和internal兩種。

5、for和foreach的區別?

    for:是循環,根據下標找元素,可讀可寫。

    foreach:是遍歷,可讀不可寫(自動遍歷給定的集合體的全部值。)

6、SqlDataAdapter和SqlCommand的區別?

    SqlDataAdapter是數年開式鏈接,不用打開,主要用於對sql的查詢

    SqlCommand須要打開服務器鏈接同時主要用於對sql的增刪改操做。

7、DataSet和SqlDataReader的區別?

    DataSet:斷開式鏈接,一次性填充全部數據到內存中。

    SqlDataReader:一次只讀取一行記錄,須要一直保護鏈接,效率高於DataSet。

8、ADO.net經常使用的組件?

    Sqlcommand命令對象

    SqlConnection鏈接對象

    SqlDataAdapter數據適配器

    SqlTransaction表示要在SQL Server中處理Transact-SQL事務。

    SqlParameter表示SqlCommand的參數,也能夠是它到DataSet列的映射。

9、泛型集合的好處?

一、 避免裝拆箱;

二、 提供指定類型;

三、 泛型裏有大量的擴展方法,方便查找和操做數據。

10、三層的依關係?

    數據訪問層:依賴於實體層和數據訪問接口(補充:實現對數據的保存和讀取操做);

業務邏輯層:依賴於實體層和數據訪問層(補充:是表示層與數據訪問層之間的橋樑,負責數據處理、傳遞)。

    表示層:依賴於實體層和業務邏輯層。

11、什麼是裝拆箱?

    將值類型轉換爲引用類型是裝箱,將引用類型轉換爲值類型是拆箱。

12、靜態類包含的方法必定是靜態方法?

    必定是。靜態類不能被實便化。

十3、如何防止一個類不能被繼承?

    使用sealed關鍵字,表示密封類。

十4、解釋這個表達式的相關符號

    Regex reg=new regex(@」[0-9]+(,[0-9]{1})?$」);

^:開始

&:結束

{1}:表示一位小數

+:前面出現的表達式只能是1次或屢次

?:前面出現的表達式只能是0次或1次

*:前面出現的表達式只能是0次或屢次

十5、屬性的做用?

一、 封裝字段,爲字段提供有效的數據驗證;

二、 爲其它類提供一個外部的訪問接口。

十6、封裝的做用?

    隱藏內部實現,穩定外部接口

十7、show和showDialog的區別?

    show()能夠同時彈出多個窗體(非模式化窗口)

    showDialog()(模式化窗口)

十8、MessageBox.Show()的返回值是什麼類型?

    DialogResult類型

十9、解釋as和is的使用?

    as:用於在兼容的引用類型之間執行轉換。

    is:檢查對象是否與指定類型兼容

二10、public class SQLHelper:DBHelper在子類中經過什麼關係字符繼承基類?

    在C#中使用:

二11、FocusedItem表示的是什麼?

    表示具備焦點的項。

二12、解釋圖片上傳的相關代碼

    //打開文件對話框

    this.openFileImage.ShowDialog()=dialogResult.OK

    //得到選擇的圖片路徑

    string filename=openFileImage.FileName;

    //FileName:獲取或設置一個包含在文件對話框中選定的文件名的字符串,文件名既包含文件路徑也包含擴展名。

    //LastIndexOf:在此實例中的最後一個匹配項的索引位置

    string fileType=filename.SubString(FileName.LastIndexOf(「.」)+1;

//從指定的文件建立image

ptbImage.Image=Image.FromFile(FileName);

this.txtLiuLan.Text=Filename;//把獲取的圖片路徑賦值給瀏覽文本框

//獲取對話框中所選擇文件的文件名和擴展名。文件名不包含路徑

string picName=openFileImage.SafeFileName;

//Application.StartupPath:獲取啓動了應用程序的可執行文件的路徑,返回string類型

//File…Copy方法(string,string,Boolean)將現有文件複製到新文件。true容許覆蓋同名的文件

File.Copy(FileName,Application.StartupPath+@」\images\」+picName,true);

//保存圖片到ImageList圖片集合控件

//@符號的做用:把字符按原樣輸出

 frmBookInfo.ImageList1.Image.Add(picName,Image.FromFile(FileName));

//Image.FromFile返回image類型

二十3、怎樣將至綁定到下拉列表中?隱藏綁定圖書類型的編號有什麼用意?

    //獲取數據源

    cboType.DataSource=ttypeServers.SelectBookType();

    //指定顯示的成員名字

     cboType.Displaymember=」BookTypeName」;

    //指定顯示成員的value屬性

    cboType.ValueMember=」BookTypeId」;

 隱藏圖書類型編號的用意:以便新增、修改圖書信息時獲取圖書類型編號。

二十4、string類型是否能被繼承?

    string類型不能被繼承,由於string前面有sealed修飾,它是一個密封類。

二十5、#region、#endregion的意思?

    指定可展開或摺疊的代碼塊,#region塊必須以#endregion指定終止

二十6、C#是否支持多繼承?

    C#中不支持多繼承,由於繼承具備單根性。

二十7、結構體是值類型仍是引用類型?

    是值類型。

二十8、command有哪幾種經常使用的方法?

    ExecuteNonQuery()返回的是一個影響的行數,爲int類型;

    ExecuteReader()表示讀取查詢的數據

    ExecuteScalar()返回第一行第一列的值

 

    錯別字不免,勿怪。



(完)

相關文章
相關標籤/搜索