C#進階學習筆記


引言

一個程序就好比一個世界,這個世界是由各種不同的種類組成(人、動物),每種種類的每個個體就是對象......

第一章

一、回顧數組

1、變量 : 只能存儲一個數據

2、數組 :存儲固定大小的相同類型的數據

3、對象 : 存儲多個相同/不同類型的數據

4、集合 : 特殊的容器,存儲N個相同/不同類型的數據

注意:容器中存儲的數據是我們要即將處理的數據(內存)

 

二、工具類

System.Array類 -> 類庫

Random -> 產生隨機數

Array -> 對數組進行操作

注:

1)調用方法時,注意以下幾點:

第一:方法名

第二:參數

第三:返回值(一般用變量接收)

2)在C#中,提供很多的類庫,每個類中提供了相關的屬性和方法

 

三、集合

1、概念

集合:特殊的容器,存儲N個相同/不同類型的數據

2、分類

非泛型集合類 :ArrayList、HashTable

泛型集合類 : List、Dictionary

3、裝箱與拆箱

裝箱 : 基本數據類型 -> 對象類型(object)

拆箱 : 對象類型(object) -> 基本數據類型

注:object是一個特殊的數據類型,可以接收任意類型的數據

4、is運算符

5、泛型:指定集合存放數據的種類

 

四、常用的集合對象(重點)

1、存儲單個元素的集合

1)語法

List<T> 集合名 = new List<T>();

注:T表示的就是泛型,指定集合存儲數據的種類

T表示任意的數據類型,也可以是自定義對象類型

2)常用的屬性和方法

Count:獲取集合大小

Add():把元素添加到集合的最后位置

Insert(下標,元素):在指定的下標位置添加元素

Remove(元素)/RemoveAt(下標):移除集合中的某個元素

Clear():清空集合中的所有元素

ToArray():把集合轉換為數組

Contains():查找集合中是否包含某個元素

 

2、存儲鍵值對的元素

1)語法

Dictionary<K,V> 集合名=new Dictionary<K,V>();

2)常用的屬性和方法(作用與List類似)

Count

Add()

Remove()

Clear()

ContainsKey()/ContainsValue()

 

第二章

一、面向對象的三大特征之繼承

1、什么是繼承(is-a)

繼承是描述的是類與類之間的父子關系

表示父親的類,叫父類(基類、超類)

表示兒子的類,叫子類(派生類)

 

2、語法

[訪問修飾符] class 子類 : 父類

{

字段

屬性

方法(構造方法、靜態方法、實例方法、重載方法)

}

注:

1)子類也叫派生類、父類也叫基類

2)繼承需要符合的關系:is-a

3)子類繼承父類的成員(非私有)

同時,子類也可以具有自己特有的成員

成員指的是:屬性和方法

4)訪問修飾符:控制訪問權限

public

private

protected

internal

5)Object類是所有類的父類

C#中所有的類(包括自定義的類),都是直接或間接繼承自System.Object類,object 是所有類的父類,因此,可以接收任意類型的數據

6)this與base關鍵字(難點)

this:當前對象的引用 -> 在類的內部,方法之間的調用

this():當前對象的構造方法 -> 在類的內部,構造方法之間的調用

base:是一個用來引用繼承自父類的成員的引用

base():父類對象的構造方法 -> 子類的構造方法,調用父類的構造方法

7)子類構造方法默認調用了父類的缺省構造方法

因此,當重載構造方法時,默認構造方法建議顯式寫出來

8)在C#中,只支持單繼承(即子類只能繼承一個父類)

錯誤:

class Student : Man,People

{

}

正確:

class Student : Man {}

class Man : People {}

9)繼承具有傳遞性

10)sealed : 密封

 

3、繼承的優缺點

優點:

1)因為大部分是繼承而來的,實現代碼重用,減少代碼書寫量

2)很容易修改和擴展已有的實現

缺點:

1)父類變,子類不得不變

2)繼承破壞了封裝,父類實現細節暴露給子類

3)繼承是一種類與類之間強耦合的關系

 

第三章

一、面向對象的三大特征之多態

1、定義

多態:同一操作用於不同的對象(類的實例),可以有不同的解釋,產生不同的執行結果。

 

2、分類

1)編譯時多態:通過重載方法來實現,系統在編譯時,根據傳遞的參數、返回的類型等信息決定實現何種操作。

特點:運行速度快

2)運行時多態:通過虛方法來實現,系統在運行時,才根據實際情況(重寫方法)決定實現何種操作。

特點:高度靈活和抽象

對於同一個命令,不同的人會有不同的反應,執行不同的動作;兩個或以上不同的對象,調用同一個方法出現不同的結果。

 

3、運行時多態的三要素

1)繼承/實現

2)重寫方法:各子類以自己的方式來實現

3)子類實例化父類對象或實現類實例化接口對象

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

父類 對象名 = new 子類() ;

 

4、實現

第一:定義一個父類,在父類中,定義一個虛方法

[訪問修飾符] class 父類名稱

{

//定義虛方法

[訪問修飾符] virtual 返回值類型 方法名稱([形參列表])

{

....

}

}

 

第二:定義相關的子類,在子類中,重寫父類的虛方法

[訪問修飾符] class 子類名稱 : 父類名稱

{

//重寫父類的虛方法

訪問修飾符 override 返回值類型 方法名稱([形參列表])

{

....

}

}

 

第三:子類實例化父類對象

父類 對象名稱 = new 子類([實參列表]) ;

說明:

1)使用virtual關鍵字聲明的方法叫虛方法,不能與static、abstract或override修飾符一起使用

2)子類可以使用base重用父類功能,同時擴展新的功能

3)編譯時是父類對象,運行時是子類對象

A)可以訪問父類非私有的成員

B)不可以訪問子類特有的成員

C)必定能訪問子類重寫父類的虛方法

 

5、作用

1)應用程序不必為每一個派生類編寫功能調用,只需要對抽象基類進行處理即可,大大提高程序的可復用性。

2)派生類的功能可以被基類的方法或引用變量所調用,這叫向后兼容,可以提高可擴充性和可維護性。

 

二、抽象類

1、概念

類是對象的抽象,抽象類是類的抽象

2、語法

[訪問修飾符] abstract class 類名

{

1.字段

2.屬性

3.方法 (構造方法、靜態方法、實例方法、重載方法)

4.抽象方法 :只有方法頭,而沒有方法體(沒有實現)的方法

}

說明:

1)抽象類不能實例化

2)抽象類中可以包含抽象方法和抽象訪問器

3)抽象類不能使用static或sealed關鍵字

4)抽象類的派生的非抽象類必須實現繼承的所有抽象方法和抽象訪問器

5)類是對象的抽象,抽象類是類的抽象

6)抽象方法的語法

[訪問修飾符] abstract 返回值類型 方法名稱([參數列表]) ;

3、抽象類(抽象方法)實現的多態

4、抽象方法 VS 虛方法

1)抽象方法不能有實現;而虛方法可以有實現

2)抽象方法只能在抽象類中定義;虛方法則不是

3)抽象方法所在的類不能實例化對象;而包含虛方法所在的類可以

 

第四章

一、接口

1、定義

1)接口是行為的抽象,用於賦於對象某些行為

2)通俗地講,接口就是兩個對象相互通信的規則或約束 -> 多態

 

2、實現

第一:定義一個接口,語法如下:

[訪問修飾符] interface I接口名稱 [:繼承的接口列表]

{

//1.屬性

數據類型 屬性名 {set;get;}

//2.抽象方法

返回值類型 方法名([參數列表]) ;

}

說明:

1)接口可以包含事件、索引器、方法和屬性

接口不能包含常量、字段、運算符、實例方法、構造方法、析構函數或類型、不能包含靜態成員;接口成員一定是公共的,但不能顯式使用訪問修飾符。

2)接口與抽象類相同,不能實例化對象

3)實現接口的類有兩個情況:

非抽象類:都必須實現接口的所有成員

抽象類:顯示聲明接口的抽象方法和抽象訪問器

4)一個類可以實現多個接口

一個類可以繼承一個父類的同時,還可實現一個或多個接口。

5)命名規則:大寫並以"I"開始

 

第二:定義某個類,實現(繼承)接口

public class 類名 : 接口[列表]

{

1、屬性的實現

2、抽象方法的實現

}

注意:成員的實現有顯示實現和隱式實現兩種方式

1)顯示實現

返回值類型 接口名.方法名稱([參數列表])

{

...

}

2)隱式實現

public 返回值類型 方法名稱([參數列表])

{

...

}

 

說明:

顯示實現不能指定訪問修飾符;

一般情況,當類要實現的是單個接口,可以使用隱式實現,隱式實現的成員必須是公有的;

如果類繼承了多個接口且接口中具有相同名稱成員時,就要用到顯式實現;

當顯式實現方式存在時,隱式實現方式就失效了;

當顯式實現該接口的成員時,實現的成員不能通過類實例訪問,只能通過接口實例訪問;

當隱式實現該接口的成員時,實現的成員可以通過類實例訪問,也可以通過接口實例訪問;

不需要override關鍵字;

 

第三:使用

1)實現類實例化實現類對象

實現類 對象名 = new 實現類() ;

2)實現類實例化接口對象 -> 多態

接口 對象名稱 = new 實現類([實參列表]) ;

接口對象可以訪問實現類重寫的方法!

注:實現多態的三種形式:

父類 對象名稱 = new 子類([實參列表]) ;

抽象類 對象名稱 = new 子類([實參列表]) ;

接口 對象名稱 = new 實現類([實參列表]) ;

 

二、抽象類 VS 接口

1)抽象類主要用作對象系統的基類,共享某些主要特性,表示對象是一個什么東西;

2)接口則主要用於類,這些類在基礎水平上有所不同(即不同的、不相關的對象),但仍可以完成某些相同的任務,賦於對象具有某一個(或一些)行為;

3)接口是對動作的抽象,抽象類是對根源的抽象;

4)抽象類表示的是,這個對象是什么;接口表示的是,這個對象能做什么。比如,男人,女人,這兩個類(如果是類的話……),他們的抽象類是人。說明,他們都是人。人可以吃東西,狗也可以吃東西,你可以把"吃東西"定義成一個接口,然后讓這些類去實現它,所以,在高級語言上,一個類只能繼承一個類(抽象類)(正如人不可能同時是生物和非生物),但是可以實現多個接口(吃飯接口、走路接口)。

5)當你關注一個事物的本質的時候,用抽象類;當你關注一個操作的時候,用接口。

 

三、兩個關鍵字

1、as

把一個類型轉換為指定的引用類型,如果不能轉換,則返回null

2、is

檢查對象是否是給定類型;

檢查對象是否可以轉換為給定類型;

而不是對象是某種類型。

 

結語

一、面向對象的三大特征

抽象:通過一個事物共有的屬性和行為抽象成一個類

封裝:就是對對象的屬性和行為封裝起來,通過公開的方法進行訪問

繼承:is-a關系,子承父類,子類繼承了父類的非私有方法,子類可以重寫父類方法,繼承一個父類是為了保證類的純潔性

多態:靜態的多態(編譯時多態),如構造方法的重載;運行時多態,如子類實例化父類對象;類的多態,如貓類分黑貓、白貓;行為的多態,如接口

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM