日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#速学

發(fā)布時間:2025/3/21 C# 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#速学 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

第一章

?

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

2、C#的異常處理機制:try? catch? finally

???????? Try? 引發(fā)異常? catch捕獲異常??? finally?? 釋放資源

3、catch? finally(錯誤)

問題:.NET? Framework由什么組成?

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

?

第二章? 類、對象、方法

?

1、什么是類:具有相似特性(屬性)和行為(方法)的對象的集合。

2、什么是對象:在現(xiàn)實世界中存在的,并且看得見摸得著的一切事物。

3、類與對象之間的關(guān)系:一對多的關(guān)系。類是對象的藍圖。

4、面向?qū)ο蟮娜筇匦?#xff1a;封裝、繼承、多態(tài)。

???????? 封裝:隱藏內(nèi)部實現(xiàn),穩(wěn)定外部接口。

???????? 繼承:子類繼承父類的所有成員,實現(xiàn)代碼的復(fù)用。

???????? 多態(tài):不同的子類對于同一個消息做出的不同一種反映。

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

?? 成員訪問修飾符:

public

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

private

C#中的私有成員公限于類中的成員可以訪問,從類的外部訪問私有成員是不合法。

protected

為了方便派生類的訪問,有希望成員對于外界隱藏的,這時可以使用protected修符聲明成員為保護成員。

intemal

對于同一應(yīng)用程序是可以訪問的。

6、類中分為兩種成員:成員變量(字段,屬性),成員函數(shù)(方法)

?? 屬性的作用:1、封裝字段,為字段提供有效的數(shù)據(jù)驗證。

???????? ???????? ???????? ?? 2、為其他類提供一個外部的訪問接口。

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

7、方法的分類:實例方法、靜態(tài)方法、構(gòu)造方法(構(gòu)造函數(shù))

???????? 實例方法:當(dāng)一個類被實例化后,通過類的實例(對象)調(diào)用的方法。

???????? 靜態(tài)方法:當(dāng)直接通過類名調(diào)用的方法。靜態(tài)方法中只能包含靜態(tài)成員變量。

???????? 構(gòu)造方法:當(dāng)類的實例(對象)被創(chuàng)建的過程中,所調(diào)用的方法稱為構(gòu)造方法。

???????? ???????? 特點:構(gòu)造方法與類名相同,且沒有反回類型。

8、重載和重寫的概念:

重寫(override)

在面向?qū)ο笾兄匦聦崿F(xiàn)父類的虛方法或者抽象對象方法,通過override關(guān)鍵字來重寫體現(xiàn)面向?qū)ο蟮亩鄳B(tài)性。重寫又稱覆蓋。

重載

同一類中添加幾個方法名字相同,參數(shù)個數(shù)或者參數(shù)類型不同的方法,稱為重載,重載與方法的返回類型無關(guān)。

?

第三章 static、構(gòu)造函數(shù)

1、八大基本數(shù)據(jù)類型:

類型:

?

數(shù)據(jù)類型

所占字節(jié)數(shù)

整型

int

4字節(jié)

Byte

1字節(jié)

Short

2字節(jié)

long

8字節(jié)

浮點型

Double

?

Float

?

字符型

Char

?

String

?

布爾型

Boolean

?

2、const:常量是在字段定義時初始化,是靜態(tài)賦值。

?? Readonly:只讀的變量,可以在字段初始化或構(gòu)造函數(shù)中動態(tài)賦值。

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

3、構(gòu)造函數(shù)的概念:函數(shù)的名字與類名相同,并且沒有返回值,這樣的函數(shù)稱為構(gòu)造函數(shù)

構(gòu)造函數(shù)的作用:

(1)初始化字段或?qū)傩?#xff1b;

(2)用于創(chuàng)建對象。

4、析構(gòu)函數(shù)的概念:用~開頭,函數(shù)名和類同名,函數(shù)沒有訪問修飾符,函數(shù)沒有參數(shù),這樣的函數(shù)稱為析構(gòu)函數(shù)

如:~類名(){}

析構(gòu)函數(shù)的調(diào)用規(guī)則:

(1)?????? 一個類只能有一個析構(gòu)函數(shù)

(2)?????? 析構(gòu)函數(shù)沒有訪問修飾符,沒有參數(shù)

(3)?????? 析構(gòu)函數(shù)由C#程序自動調(diào)用,程序員不能調(diào)用

(4)?????? 析構(gòu)函數(shù)的作用:用于回收無用的對象所占用的內(nèi)存空間

?

比較構(gòu)造函數(shù)和析構(gòu)函數(shù)調(diào)用時間和調(diào)用頻率

實例

構(gòu)造函數(shù)

在創(chuàng)建類的每個新實例時調(diào)用一次

析構(gòu)函數(shù)

在每個實例被銷毀前調(diào)用

靜態(tài)

構(gòu)造函數(shù)

只調(diào)用一次,在類的任意靜態(tài)變量第一次被訪問之前,或在類的任何實例被創(chuàng)建之前,無論兩者誰先發(fā)生。

析構(gòu)方法

不存在,只有實例才有析構(gòu)方法

5、C#中數(shù)據(jù)類型分類:值類型、引用類型。

值類型:將實際的值保存在內(nèi)存的棧中。

引用類型:通過指針指向內(nèi)存棧中實際值的地址。引用類型的本身保存在堆中。

String sl=null;//空引用

Sl=””;//空值

6、關(guān)鍵字this公在構(gòu)造函數(shù)、類的方法和類的實例中使用,主要有以下含義:

???????? (1)出現(xiàn)在類的構(gòu)造函數(shù)中的this,表示正在構(gòu)造的對象本身的引用

???????? (2)出現(xiàn)在類的方法中的this,表示對調(diào)用該方法的對象的引用。

第四章?? 索引器、枚舉、結(jié)構(gòu)

1、定義索引器的語法

?? 訪問修飾符? 返回類型? this[數(shù)據(jù)類型 標(biāo)識]

{

??? Get{return 內(nèi)容;}

? ?? Set{}

}

?? 注意:

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

(2)?????? 索引器一般用在將對象作為數(shù)組的情況;

(3)?????? [數(shù)據(jù)類型? 標(biāo)識]數(shù)據(jù)類型根據(jù)具體情況進行定義;

(4)?????? 根據(jù)[]中的不同數(shù)據(jù)類型根據(jù)具體情況進行定義;

(5)?????? 索引器類似于屬性,可以根據(jù)下標(biāo)訪問元素,也包含get{}和set{}訪問器;

(6)?????? 索引器也類似于數(shù)組,可以根據(jù)下標(biāo)訪問元素,但索引器比數(shù)據(jù)更靈活,數(shù)據(jù)元素只能根據(jù)下標(biāo)訪問,索引器還可以根據(jù)其他類型進行訪問。

2、枚舉(enum)是一個指定的常數(shù),其基礎(chǔ)類型可以是任何整型,如果沒有顯示聲明基礎(chǔ)類型,則用int。

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

枚舉的限制:

(1)?????? 不能定義自己的方法;

(2)?????? 不能實現(xiàn)接口;

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

3、結(jié)構(gòu)(struck)是程序員自定義的數(shù)據(jù)類型,非常類似于類

?? 語法:struck? 結(jié)構(gòu)名稱

?? {

???????? ???????? //結(jié)構(gòu)成員;

}

?

第五章?? 繼承、多態(tài)

1、在C#繼承中,如果子類繼承父類,那么子類就必須繼承父類的構(gòu)造函數(shù)。如果父類沒有默認構(gòu)造函數(shù),那么子類就必須顯示調(diào)用父類帶參的構(gòu)造函數(shù)。

2、在C#中,如果子類繼承父類,在實例化子類的時候,首先執(zhí)行父類的構(gòu)造函數(shù),再執(zhí)行子類的構(gòu)造函數(shù)。

3、在C#繼承中,父類可以派生多個子類,子類只能直接繼承一個父類,繼承具有傳遞性以及單根性的特點。

4、創(chuàng)建子類對象時,程序先調(diào)用父類無參的構(gòu)造方法,再調(diào)用子類自己的構(gòu)造方法,無論子類的構(gòu)造方法是否有參數(shù),始終調(diào)用父類無參的構(gòu)造方法。

5、注意:??????

(1)?????? base關(guān)鍵字表示調(diào)用父類的構(gòu)造方法;

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

(3)?????? 根據(jù)base()中的參數(shù)個數(shù)決定調(diào)用父類的哪個構(gòu)造方法;

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

6、繼承的特點:單根性和傳遞性。

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

?? as用于在兼容的引用類型之間執(zhí)行轉(zhuǎn)換。

?

第六章? 抽象類、接口

1、抽象類(abstract):在C#中通過關(guān)鍵字abstract定義的類稱為抽象類。

2、抽象類主要用于類的藍圖或模版。

3、抽象類(abstract)的特點:

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

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

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

(4)?????? 抽象類一般作為基類,子類繼承抽象類,必須實現(xiàn)抽象類中的抽象方法;

(5)?????? 抽象類不能是密封類或靜態(tài)類。

?? 抽象方法:只能定義沒有實現(xiàn)的方法稱為抽象方法。

?? 有抽象方法的類一定是抽象類。

?? 當(dāng)子類繼承的父類是一個抽象類時,子類要么實現(xiàn)父類中所有的抽象方法,要么將自己也聲明為抽象類,子類重寫父類的抽象方法時,必須使用關(guān)鍵字override。

?? 抽象類的作用:強制約束子類的行為。

4、密封類(sealed):用關(guān)鍵字sealed定義的類為密封類。

?? 密封類的特點:

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

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

?? string是密封類,所以不能被繼承。

5、虛方法(virtual):在C#中默認的方法形式都是非虛方法。如果父類的方法被定義為虛方法,那么子類就可以通過override重寫父類的虛方法,否則子類將隱藏(new)父類的方法。

6、接口:接口是單純對事物行為的描述。

?? 接口的作用:實現(xiàn)多重繼承。

?? 接口的特點:為了C#中繼承單根性的擴展。

?? 子類繼承父類,可以實現(xiàn)多個接口。

?? 接口中包含的內(nèi)容:屬性、方法、索引器、事件。

7、類實現(xiàn)接口的語法:類名:接口名{類成員、方法}。

???注意:當(dāng)類實現(xiàn)接口時要實現(xiàn)接口中的所有方法。

8、接口的默認修飾符是public,而且public不需要顯示的定義,也不能修改成其它修飾符

?? 注意:

1)? 接口可以繼承接口,當(dāng)類實現(xiàn)的接口繼承于其它接口時,類需要實現(xiàn)子接口和父接口中的所有定義內(nèi)容。

2)? 父類實現(xiàn)接口中的方法時將方法定義為虛方法,子類繼承父類時用override關(guān)鍵字重寫父類的方法,接口中的方法子類就不需要再實現(xiàn)。

?

比較類與結(jié)構(gòu)的區(qū)別

a)?????? 類中字段可以有初始值,結(jié)構(gòu)中字段不可以有初始值。

b)?????? 類中可以包含默認構(gòu)造函數(shù),結(jié)構(gòu)中不能有顯示定義的默認構(gòu)造函數(shù),結(jié)構(gòu)體中帶參數(shù)構(gòu)造函數(shù),但是構(gòu)造函數(shù)中的參數(shù)必須為所有字段賦值。

c)?????? 類屬于引用類型,結(jié)構(gòu)屬于值類型。

d)?????? 類可以被繼承,結(jié)構(gòu)不能被繼承。

e)?????? 類必須實例化,結(jié)構(gòu)可以實例化也可以不實例化

?

虛方法與抽象方法的區(qū)別

?

虛方法

抽象方法

用virtual修飾

用abstract修飾

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

不允許有方法體

可以被子類override(重寫)

必須被子類override(重寫)

除了密封類都可以寫

只能在抽象類中

?

抽象類與接口的區(qū)別

?

抽象類

接口

不同點

用abstract定義

用interface定義

只能繼承一個類

可以實現(xiàn)多個接口

非抽象派生類必須實現(xiàn)抽象方法

實現(xiàn)接口的類必須實現(xiàn)所有成員

需要override實現(xiàn)抽象方法

直接實現(xiàn)

相似點

不能被實例化

包含未實現(xiàn)的方法

派生類必須實現(xiàn)未實現(xiàn)的方法

?

第七章? ListView 和TreeView

?

TreeView中的常用屬性的方法:

屬性?

1、 nodes:獲取TreeView控件的所有節(jié)點集合,返回一個treenodecollection,表示此控件的樹節(jié)點集合。

2、 SelectNode:獲取或設(shè)置當(dāng)前在樹視圖控件中選定的樹節(jié)點。

3、 ShowNodeTooltips:獲取或設(shè)置一個值,當(dāng)鼠標(biāo)縣停在TreeNode上時顯示工具示。

TreeView.Node返回的是Treenodecollection類型。

?

Treenodecollection屬性:

1、 count:獲取TreeNode中對象的總數(shù)。

TreeNodeCollection方法:

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

2、 Clear()刪除所有樹節(jié)點。

TreeView中每一個節(jié)點表示一個TreeNode對象

TreeNode常用屬性和方法:

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

Nodes屬性:獲取當(dāng)前樹節(jié)點的TreeView對象的集合。

ToolTipText和ShowNodeToolTips的區(qū)別:

方法:

Collapse():折疊TreeNode

CollapseAll():折疊所有的樹節(jié)點。

Expand():展開樹節(jié)點。

ExpandAll():展開所有子樹節(jié)點。

GetNodeCount():返回子樹節(jié)點的數(shù)目

?

?

AfterSelect事件:選定樹節(jié)點時觸發(fā)。

?

創(chuàng)建TreeView實例

//創(chuàng)建根節(jié)點

TreeNode root=new TreeNode(“根節(jié)點名”);

//創(chuàng)建子節(jié)點

TreeNode node=new TreeNode(“子節(jié)點名”);

//將子節(jié)點添加到根節(jié)點中

Root.Nodes.Add(node);

//將根節(jié)點添加到TreeView控件中

TreeView.Node.Add(root);

?

?

TreeNode對象用于創(chuàng)建節(jié)點

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

節(jié)點對象名1.Text——給節(jié)點設(shè)置文本

注意:TreeView中只需添加根節(jié)點

?

ExpandAll()方法展開所有節(jié)點

?

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

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

?

ListView常用屬性及方法

屬性:

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

FocusedItem:獲取或設(shè)置當(dāng)前具有焦點的控件的項。

Items:獲取包含控件中所有項的集合。

Columns:獲取控件中顯示的所有列標(biāo)題的集合。

SelectedItems:獲取控件中當(dāng)前選中的項。

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

ListViewItem:屬性的方法

SubItems:獲取包含該項的所有子項的集合。

Text:獲取或設(shè)置項的顯示文本。

ToolTipText:獲取或設(shè)置當(dāng)鼠標(biāo)停留在ListViewItem上時顯示的文本。

ListView常用的方法:

Clear:刪除ListView中的所有的項。

?

創(chuàng)建ListView的實例:

//清空原有項

ListView1.Items.Clear();

//創(chuàng)建ListView對象

ListViewItem item=new ListViewItem(“集點項數(shù)據(jù)”);

//添加子項

Item.SubItems.Add(“子項數(shù)據(jù)”);

//向ListView中添加項

ListView1.Items.Add(item);

?

第八章? 委托與事件

委托的定義:委托是一種引用方法的類型。一旦為委托分配了方法,委托將與該方法具有完全相同的行為。委托方法的調(diào)用可以像其他任何方法一樣,具有參數(shù)的返回值,委托方法將方法作為參數(shù)進行引用。

語法:

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

委托不能被繼承和重載。

委托的簽名:由返回類型和參數(shù)值組成。

?

將方法委托給對象的實現(xiàn)步驟:

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

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

class 類名

{

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

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

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

}

(3)?? 創(chuàng)建類的對象:類名? 對象名 =new 類名();

(4)?? 創(chuàng)建委托對象:

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

方法二:委托名? 委托對象名=對象名.方法名;

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

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

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

(6)調(diào)用委托對象:如

????? 委托對象名();

例:委托的實例:

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

public delegate void Hello();

//創(chuàng)建委托對象

HelloDel del=new HeelDel(方法名);

//在測試為中調(diào)用委托

Del();

?

注意:委托對象名后一定要跟();

??? ? 委托名、類名、方法名1、對象名、委托對象名均由程序員定義

匿名方法:

語法:

Delegate? 參數(shù)弄表? {語句塊}

匿名方法實例

//定義委托

Delegate? void Hello()

//通過匿名方法創(chuàng)建委托對象

Hello hello=delegate()

{

??? Console.WriteLine(“hello!”);

}

//調(diào)用委托

Hello();

?

?

練習(xí):使用委托,輸出本周和下周的學(xué)習(xí)安排

將方法給委托對象的規(guī)則:

(1)?? 委托的參數(shù)類型要和方法的參數(shù)類型一致。

(2)?? 可以委托多個有返回值的方法,但委托對象的返回值是最后一個方法的返回值

(3)?? +=表示添加要委托的方法,-=表示去掉已經(jīng)委托的方法。

練習(xí):定義委托,執(zhí)行接收一個數(shù)字,返回該數(shù)字的立方的方法。

?

事件

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

1、 委托是事件的基礎(chǔ),事件返回委托的類型。

2、 定義事件的語法:

訪問修飾符? event? 委托名 事件名;

使用事件的步驟:

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

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

?

class 類名1

{

??? //定義事件

??? 訪問修飾符 event 委托名? 事件名;

??? //定義方法調(diào)用事件

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

??? {

??? ??? [//代碼部分]

??? ??? //調(diào)用事件

??? ??? 事件名();

}

}

?

?

?

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

class? 類名2

{

??? //定義方法響應(yīng)事件

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

??? {

??? ??? //代碼部分

}

}

?

4) 訂閱事件,如:

//創(chuàng)建響應(yīng)事件類的對象

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

//將類中方法給委托

委托名? 委托對象名=對象名.方法名2;

//創(chuàng)建角發(fā)事件類的對象

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

//將委托加載到事件

??? 對象名1.事件名+=委托對象名;

//調(diào)用角發(fā)事件的方法

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

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

注意:委托事件的基礎(chǔ)。

?

事件的事例:

//定義委托

Public delegate void del();

//定義事件

public event del eve;

//定義角發(fā)事件的方法

public void begin()

{

??? Console.WriteLine(“處理。”);

}

//定義訂閱事件的方法

public void DingYue()

{

??? eve+=new del(chuli);

}

?

?

?

?

第十章?? 文件操作

?

File 類——操作文件,是一個靜態(tài)類

??? 主要提供用于創(chuàng)建、復(fù)制、刪除、移動和打開文件的靜態(tài)方法,其更側(cè)重于對文件的操作。

File類是一個密封類,不能被繼承。其所有成員皆是靜態(tài)的,可以不要創(chuàng)建實例

File類的常用方法

?

Create(路徑及文件名.后綴)——創(chuàng)建文件

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

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

copy(源文件路徑,目標(biāo)文件路徑)——復(fù)制文件

move(源文件路徑,目標(biāo)文件路徑)——移動文件(相當(dāng)于剪切和粘貼)

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

?

練習(xí):在E盤下創(chuàng)建文件:學(xué)習(xí)計劃.txt,然后將文件移動到D盤,再判斷D盤下是否存在該文件,如果存在,將文件刪除。

?

創(chuàng)建文件的實例:

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

string?path=@“E:\test.txt”

//判斷文件是否存在

if(File.Exists(path))

{

??? //如果存在則刪除

??? File.Delete(path);

}

else

{

??? //創(chuàng)建文件

??? File.Create(path);

}

?

//向文件中寫入內(nèi)容的操作步驟

(1)?? 打開文件(可以判斷,如果文件不存在則先創(chuàng)建,如果存在則以寫的方式打開);

(2)?? 將要寫進文件的內(nèi)容用字節(jié)數(shù)組保存;

(3)?? 調(diào)用文件流的Write()方法將內(nèi)容寫進文件;

(4)?? 關(guān)閉文件流。

?

用FileStream向文件中寫入內(nèi)容的實例:

//創(chuàng)建一個文件流

FileStream fs=null;

//創(chuàng)建一個FileStream對象

fs=new FileStream(“E:\test.text”,FileModel.OpenOrCreate);//使用指定的路徑和創(chuàng)建模式初始化

?

FileStream類的新實例。

將字符串按UTF8的編碼方式轉(zhuǎn)換為字節(jié)數(shù)組:

byte[] array=new UTF8Encoding(true).GetBytes(“內(nèi)容”);

Encoding.Default.GetBytes(內(nèi)容)——使用系統(tǒng)默認的字符集將內(nèi)容轉(zhuǎn)換成字節(jié)數(shù)組

?

寫入內(nèi)容

fs.write(“寫入的內(nèi)容”,0,“寫入字節(jié)長度”);緩沖區(qū)讀取的數(shù)據(jù)將字節(jié)塊寫入該流,0:從零開始的字節(jié)偏一,從此處開始將字節(jié)復(fù)制到當(dāng)前流。

//清空緩沖區(qū)

fs.flush();

//關(guān)閉流

fs.Close();

?

?

從文件中讀取內(nèi)容的操作步驟:

(1)?? 打開文件(可以判斷文件是否存在)

(2)?? 定義字節(jié)數(shù)組

(3)?? 調(diào)用文件流的Read()方法,將文件中的內(nèi)容讀取到字節(jié)數(shù)組

(4)?? 將字節(jié)數(shù)組轉(zhuǎn)換后輸出

(5)?? 關(guān)閉文件流

?

練習(xí):向E盤下的“學(xué)些計劃.txt”文件寫入學(xué)習(xí)計劃,然后讀取學(xué)習(xí)計劃,在控制臺中打印

?

FileInfo類:提供創(chuàng)建、復(fù)制、刪除、移動和打開文件的實例方法,FileInfo類屬于sealed密封類,不能被繼承。

FileInfo類的常用屬性

l? Exists ??? ??? ??? ????判斷該文件是否存在

l? Length ??? ??? ??? ??? 文件的大小

l? Name ?? ??? ??? ??? ??? 文件名

l? FullName ?? ??? ??? ??? 文件的完整路徑

l? IsReadOnly ??? ??? ??? 是否為只讀

l? Creationtime ?? ??? ??? 當(dāng)前文件的創(chuàng)建時間

l? ?

Directory類:提供用于創(chuàng)建、移動、刪除目錄和子目錄的靜態(tài)方法

l? Delete? ??? ??? ??? ??? 刪除目錄及其內(nèi)容

l? Exists? ??? ??? ??? ??? 判斷目錄是否存在

l? GetCurrentDirectory ??? 應(yīng)用程序的當(dāng)前工作目錄

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

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

l? Move??? ??? ??? ??? ??? 將目錄移動新的位置

DirectoryInfo類:提供了用于創(chuàng)建、移動、刪除目錄和子目錄的實例方法

l? Create? ??? ??? ??? ??? 創(chuàng)建目錄

l? delete? ??? ??? ??? ??? 刪除DirectoryInfo及其內(nèi)容

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

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

l? MoveTo將DirectoryInfo? 實例及其內(nèi)容移動到新位置

File類靜態(tài)類,FileInfo密封類

使用建議:

(1)?? 如果需要對文件進行多次操作,應(yīng)FileInfo類,因為在創(chuàng)建對象時就指定了正確的路徑,File中的方法大多是靜態(tài)的,每次都需要重新尋找文件,會花費更多資源。

(2)?? 如果公操作文件一次,應(yīng)使用File類,直接調(diào)用方法,無需創(chuàng)建對象。

我的問題:WinForm中的文件與Java中有何區(qū)別?

?

?

第十一章 集合與泛型

泛型:List<T>

T表示任意數(shù)據(jù)類型,用來約束添加到集合中的內(nèi)容

?

ArrayList

List<T>

不同點

可以添加任何元素,添加元素時裝箱,讀取元素時拆箱。

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

相同點

可以動態(tài)的添加、刪除元素,使用索引引訪問元素。

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

?

?

HashTable

Dictionary<KT,VT>

不同點

可以添加任何元素,添加時裝箱,讀取時拆箱

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

相同點

動態(tài)的添加、刪除元素,根據(jù)鍵訪問元素。

?

泛型集合細解:

Array:

??? Array是所有數(shù)組類的基類

??? 創(chuàng)建一個數(shù)組的語法:Array a=Array.CreateInstance(typeOf(指定數(shù)據(jù)類型),大小);

a.Length;數(shù)據(jù)元素的個數(shù)

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

a.GetValue();從數(shù)組中取得指定下標(biāo)的元素

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

a.Reverse();翻轉(zhuǎn)原有數(shù)組元素

??? ……

ArrayList:

??? ArrayList(列表集合)是常用的集合類型,他可以動態(tài)添加、刪除元素,其大小可以動態(tài)變化,他把所有元素都當(dāng)成object對象引用,因此訪問ArrayList元素時要進行類型轉(zhuǎn)換。

??? 構(gòu)造函數(shù):

(1)?? 默認構(gòu)造函數(shù):ArrayList arrayList=new ArrayList();

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

arrName:數(shù)組名字

(3)?? 使用指定大小初始化內(nèi)部大小的數(shù)組構(gòu)造函數(shù):ArrayList arrayList=new arrayList(n);

n:指定的初駘大小。

??? 添加元素:

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

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

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

??? 刪除元素:

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

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

??? ??? RemoveRange(int index,int count);該方法用于從集合中移除一定范圍的元素

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

??? ??? ??? ??? ??? ??? count要移除的元素的個數(shù)

??? ??? Clear();該方法用于從集合中移除所有的元素。

??? 搜索元素:

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

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

??? HashTable:

??? ??? HashTable(哈希表)是System.Collections命名空間提供的一個集合,可以將數(shù)據(jù)作為一組鍵/值對來存儲,它的每個元素都是一個存儲在DictionaryEntry對象中的鍵/值對。鍵不能為空,區(qū)分大小寫,不能重復(fù);值可以為空,可重復(fù)。

??? 構(gòu)造函數(shù):

(1)?? 默認構(gòu)造函數(shù):HashTable ht =new hashTable();

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

添加元素:

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

刪除元素:

??? ??? Clear();將HashTable中所有元素移除。

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

搜索元素:

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

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

泛型:

??? 泛型一個主要優(yōu)點是性能,泛型的目標(biāo)是采用廣泛適用的和可交互性的形式來表示算法和數(shù)據(jù)結(jié)構(gòu),以使他們能直接用于軟件構(gòu)造。泛型能在編譯時提供強大的類型檢查,減少數(shù)據(jù)類型之間的顯示轉(zhuǎn)換,裝拆箱操作和運行時的類型檢查,可以強化類型的集合,提高性能。

List<T>

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

??? 構(gòu)造函數(shù):

??? ??? 默認構(gòu)造函數(shù):List<T> list=new List<T>();該實例為空并且具有默認初始容量

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

?

?

?

第十三章? 序列化和反射

?

序列化:將對象轉(zhuǎn)換成可存儲格式的過程稱為序列化。

反序列化:將文件中的內(nèi)容生成對象的過程稱為反序列化。

?

序列化的步驟:

(1)?? 創(chuàng)建要保存的內(nèi)容:字符串、集合對象、泛型集合對象、對象數(shù)組……

(2)?? 創(chuàng)建文件流:FileStream fs=new FileStream(“路徑”,“打開方式”);

(3)?? 創(chuàng)建序列化對象:BinaryFormatter bf=new BinaryFormatter();

(4)?? 調(diào)用方法,將內(nèi)容保存到文件中: bf.Serialize(fs,內(nèi)容);

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

(6)?? 關(guān)閉流件流:fs.Close();

反序列化的步驟:

(1)?? 創(chuàng)建文件流:FileStream fs=new FileStream(“路徑”,“打開方式”);

(2)?? 創(chuàng)建序列化對象:BinaryFormatter bf=new BinaryFormatter();

(3)?? 調(diào)用方法,將讀取的內(nèi)容保存到對應(yīng)類型的以象中:

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

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

??? ?(5)?? 關(guān)閉文件流:fs.Close();

??? ?(6)?? 輸出變量/對象中的內(nèi)容。

?

三 層

三層結(jié)構(gòu):(3W1H)

(一)問題:

1、 什么是三層?

2、 為什么要使用三層?

3、 在哪兒用三層?

4、 怎樣搭建三層?

5、 有哪三層?

??????????????????????????????????????????????????????????????????????

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

?

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

??? ??? ??? ??? BLL(Business Logic Layer? 業(yè)務(wù)邏輯層)

??? ??? ??? ??? DAL(Data Access Layer?? 數(shù)據(jù)訪問層)

(三)三層的依賴關(guān)系:

1、 數(shù)據(jù)訪問層依賴于實體層與數(shù)據(jù)訪問接口。

2、 業(yè)務(wù)邏輯層依賴于實體層與數(shù)據(jù)訪問層。

3、 表示層依賴于實體層與邏輯層。

(四)三層的職責(zé)

  • 數(shù)據(jù)訪問層:提出數(shù)據(jù)庫中的數(shù)據(jù),對數(shù)據(jù)進行增、刪、改操作。
  • 業(yè)務(wù)邏輯層:提取數(shù)據(jù)訪問層中的數(shù)據(jù),對數(shù)據(jù)進行業(yè)務(wù)功能上的篩選與驗證。
  • 表示層:為客戶提供人機交互的界面。
  • (五)三層的作用:分工明細,有利于軟件的可維護性與可擴展性。

    ?

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

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

    一個業(yè)務(wù)功能點的實現(xiàn)都需要在BLL類中篩選與驗證,BLL中不包含任何的數(shù)據(jù)庫操作語句。

    ?

    ?

    ?

    QUESTION AND ANSWER

    一、imageKey和imageIndex的區(qū)別?

    ??? imageKey:獲取或設(shè)置為該項顯示的圖像的鍵。

    ??? imageIndex:獲取或設(shè)置為該項顯示的圖像的索引。

    二、什么是重寫和重載?

    重寫:在面向?qū)ο笾?#xff0c;子類繼承父類,子類將父類的抽象方法具體實現(xiàn)或重新實現(xiàn)父類中的虛方法的過程。

    ??? 重載:方法名相同,參數(shù)個數(shù)、順序、類型不同。重載與方法的返回類型無關(guān)。

    三、異常關(guān)鍵字解釋

    ??? try:監(jiān)控代碼

    ??? catch:捕獲異常

    ??? finally:釋放資源,始終都會執(zhí)行

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

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

    五、for和foreach的區(qū)別?

    ??? for:是循環(huán),根據(jù)下標(biāo)找元素,可讀可寫。

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

    六、SqlDataAdapter和SqlCommand的區(qū)別?

    ??? SqlDataAdapter是數(shù)年開式連接,不用打開,主要用于對sql的查詢

    ??? SqlCommand需要打開服務(wù)器連接同時主要用于對sql的增刪改操作。

    七、DataSet和SqlDataReader的區(qū)別?

    ??? DataSet:斷開式連接,一次性填充所有數(shù)據(jù)到內(nèi)存中。

    ??? SqlDataReader:一次只讀取一行記錄,需要一直保護連接,效率高于DataSet。

    八、ADO.net常用的組件?

    ??? Sqlcommand命令對象

    ??? SqlConnection連接對象

    ??? SqlDataAdapter數(shù)據(jù)適配器

    ??? SqlTransaction表示要在SQL Server中處理Transact-SQL事務(wù)。

    ??? SqlParameter表示SqlCommand的參數(shù),也可以是它到DataSet列的映射。

    九、泛型集合的好處?

    1、 避免裝拆箱;

    2、 提供指定類型;

    3、 泛型里有大量的擴展方法,方便查找和操作數(shù)據(jù)。

    十、三層的依關(guān)系?

    ??? 數(shù)據(jù)訪問層:依賴于實體層和數(shù)據(jù)訪問接口(補充:實現(xiàn)對數(shù)據(jù)的保存和讀取操作);

    業(yè)務(wù)邏輯層:依賴于實體層和數(shù)據(jù)訪問層(補充:是表示層與數(shù)據(jù)訪問層之間的橋梁,負責(zé)數(shù)據(jù)處理、傳遞)。

    ??? 表示層:依賴于實體層和業(yè)務(wù)邏輯層。

    十一、什么是裝拆箱?

    ??? 將值類型轉(zhuǎn)換為引用類型是裝箱,將引用類型轉(zhuǎn)換為值類型是拆箱。

    十二、靜態(tài)類包含的方法一定是靜態(tài)方法?

    ??? 一定是。靜態(tài)類不能被實便化。

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

    ??? 使用sealed關(guān)鍵字,表示密封類。

    十四、解釋這個表達式的相關(guān)符號

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

    ^:開始

    &:結(jié)束

    {1}:表示一位小數(shù)

    +:前面出現(xiàn)的表達式只能是1次或多次

    ?:前面出現(xiàn)的表達式只能是0次或1次

    *:前面出現(xiàn)的表達式只能是0次或多次

    十五、屬性的作用?

    1、 封裝字段,為字段提供有效的數(shù)據(jù)驗證;

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

    十六、封裝的作用?

    ??? 隱藏內(nèi)部實現(xiàn),穩(wěn)定外部接口

    十七、show和showDialog的區(qū)別?

    ??? show()可以同時彈出多個窗體(非模式化窗口)

    ??? showDialog()(模式化窗口)

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

    ??? DialogResult類型

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

    ??? as:用于在兼容的引用類型之間執(zhí)行轉(zhuǎn)換。

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

    二十、public class SQLHelper:DBHelper在子類中通過什么關(guān)系字符繼承基類?

    ??? 在C#中使用:

    二十一、FocusedItem表示的是什么?

    ??? 表示具有焦點的項。

    二十二、解釋圖片上傳的相關(guān)代碼

    ??? //打開文件對話框

    ??? this.openFileImage.ShowDialog()=dialogResult.OK

    ??? //獲得選擇的圖片路徑

    ??? string filename=openFileImage.FileName;

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

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

    ??? string fileType=filename.SubString(FileName.LastIndexOf(“.”)+1;

    //從指定的文件創(chuàng)建image

    ptbImage.Image=Image.FromFile(FileName);

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

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

    string picName=openFileImage.SafeFileName;

    //Application.StartupPath:獲取啟動了應(yīng)用程序的可執(zhí)行文件的路徑,返回string類型

    //File…Copy方法(string,string,Boolean)將現(xiàn)有文件復(fù)制到新文件。true允許覆蓋同名的文件

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

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

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

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

    //Image.FromFile返回image類型

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

    ??? //獲取數(shù)據(jù)源

    ??? cboType.DataSource=ttypeServers.SelectBookType();

    ??? //指定顯示的成員名字

    ??? ?cboType.Displaymember=”BookTypeName”;

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

    ??? cboType.ValueMember=”BookTypeId”;

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

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

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

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

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

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

    ??? C#中不支持多繼承,因為繼承具有單根性。

    二十七、結(jié)構(gòu)體是值類型還是引用類型?

    ??? 是值類型。

    二十八、command有哪幾種常用的方法?

    ??? ExecuteNonQuery()返回的是一個影響的行數(shù),為int類型;

    ??? ExecuteReader()表示讀取查詢的數(shù)據(jù)

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

    ?

    ??? 錯別字難免,勿怪。



    (完)

    轉(zhuǎn)載于:https://www.cnblogs.com/sparkleDai/p/7605088.html

    總結(jié)

    以上是生活随笔為你收集整理的C#速学的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。