1. 程式人生 > >C#進階學習筆記—個人整理

C#進階學習筆記—個人整理

直接 描述 關鍵字 重載 類名 pri 聯系 sys 第三章

學習筆記

第一章:

一、回顧數組

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

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

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

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

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

課堂練習 -> 查看筆記

定義一個數組,初始化10個整數,計算最大值和總和!

二、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() : 查找集合中是否包含某個元素

課堂練習:

創建一個集合,用於存儲5個字符串

1)輸出其長度和所有的內容

2)判斷這個字符串中,是否包含"好好學習"

創建一個集合,用於存儲3個學生對象(姓名、年齡)

1)輸出集合中所有學生的信息(姓名、年齡)

2)計算集合中所有學生的平均年齡

使用集合,實現手機通訊錄功能

聯系人 : 姓名、電話、地址

手機 :

添加聯系人

刪除聯系人

修改聯系人

查找全部聯系人

查找聯系人

註:

手機 : 聯系人 -> 1:N

2、存儲鍵值對的元素

1)語法

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

2)常用的屬性和方法

Count

Add()

Remove()

Clear()

ContainsKey()/ContainsValue()

第二章:

一、面向對象的三大特征

封裝、繼承、多態

二、繼承

1、什麽是繼承

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

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

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

課堂練習:創建三個類,分別是人、學生、老師

在三個類中分別定義兩個屬性:姓名、年齡

在三個類中分別定義兩個方法:吃、拉

創建對象,測試

學生 is-a 人

老師 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 : 密封

三、繼承的優缺點

1、優點:

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

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

2、缺點:

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

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

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

第三章:

一、面向對象的三大特征

封裝、繼承、多態

二、多態

1、定義

多態:同一操作用於不同的對象(類的實例),

可以有不同的解釋,

產生不同的執行結果。

2、分類

1)編譯時多態:通過重載方法來實現,

系統在編譯時,根據傳遞的參數、

返回的類型等信息決定實現何種操作。

特點:運行速度快

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

特點:高度靈活和抽象

EG:

小孩、運動員、演員 -> play

理發師、外科醫生、演員 -> cut

對於同一個命令,不同的人會有不同的反應,執行不同的動作;

兩個或以上不同的對象,調用同一個方法出現不同的結果。

3、運行時多態的三要素

1)繼承/實現

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

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

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

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

三、實現

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

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

{

//定義虛方法

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

{

....

}

}

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

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

{

//重寫父類的虛方法

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

{

....

}

}

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

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

說明:

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

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

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

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

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

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

課堂練習

英語老師、體育老師、DotNet老師 : 教

教務老師 : 分配老師上課

public void FenPei(英語老師 t)

{

Console.WriteLine("安排上課") ;

t.教() ;

}

樂器:小提琴、鋼琴、二胡...,不同樂器發出不同的聲音

音樂家:演奏時,使用各種樂器

獵物 : 鳥、土豬、老虎... -> 跑

獵人 : 打獵

四、作用

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、as : 把一個類型轉換為指定的引用類型,如果不能轉換,則返回null

2、is :

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

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

而不是對象是某種類型。

C#進階學習筆記—個人整理