C#進階學習筆記—個人整理
學習筆記
第一章:
一、回顧數組
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#進階學習筆記—個人整理