C#類-封裝,繼承,多態(tài),訪問修飾符

訪問修飾符

字段、方法都可以叫做類的成員Member,它們都需要定義訪問級(jí)別。

訪問級(jí)別的用處在于控制成員在哪些地方可以被訪問。

訪問修飾符:public/private/internal/protected

private : 私有成員, 在類的內(nèi)部才可以訪問。

public : 公共成員,完全公開,沒有訪問限制。

protected : 保護(hù)成員,該類內(nèi)部和繼承類中可以訪問。

internal: 當(dāng)前程序集內(nèi)可以訪問。程序集:exe\dll中

internal protected:internal 和 protected的并集, 同一個(gè)程序集中的所有類,以及所有程序集中的子類。

修飾符可以修飾的內(nèi)容:

類(class)和結(jié)構(gòu)(struct)只能用public, internal來修飾

成員(屬性、方法)能用以上5種來修飾

默認(rèn)沒有訪問修飾符的默認(rèn)規(guī)則:

類中字段和方法默認(rèn)的訪問修飾符是private

類(class)和結(jié)構(gòu)(struct)默認(rèn)的訪問修飾符是internal

注:程序集(Assembly)-一般指一個(gè)Exe可執(zhí)行文件或類庫(DLL文件)

封裝:

行為(方法)和字段(數(shù)據(jù))的結(jié)合

含義:將字段(數(shù)據(jù)成員)和行為(代碼成員)相組合的一種機(jī)制。

目的:

1.控制對(duì)象狀態(tài)的范圍

2.加強(qiáng)對(duì)象自身的內(nèi)聯(lián)(聯(lián)動(dòng))性

3.增強(qiáng)對(duì)象使用的安全性

封裝的基本要求:

特定邊界:所有的內(nèi)部變化都限制在此邊界內(nèi)(類定義的{ });

特定訪問權(quán)限:在對(duì)象外部不能訪問或修改受保護(hù)的內(nèi)部實(shí)現(xiàn)細(xì)節(jié)(private成員)

有外部接口(方法):此對(duì)象利用它與其它對(duì)象發(fā)生關(guān)聯(lián)(public成員);

例:銀行的取錢方案等

屬性:

屬性和字段結(jié)合實(shí)現(xiàn)封裝

屬性的定義:屬性代表了set和get方法

[訪問修飾符 一般為public] ?[new|virtual|override] 屬性類型 屬性名

{

get

{

// 返回屬性對(duì)應(yīng)的字段的值

}

set

{

// 設(shè)定屬性對(duì)應(yīng)的字段的值,參數(shù)值由隱參value接收

// 自動(dòng)執(zhí)行:value=傳入的參數(shù)值

}

}

屬性的作用:快速封裝字段

屬性分類: 讀寫(set+get)、只讀(get)、只寫(set)

使用屬性:

對(duì)象引用.屬性=屬性值:自動(dòng)調(diào)用set方法

對(duì)象引用.屬性:自動(dòng)調(diào)用get方法

繼承:

面向?qū)ο笾械膬蓚€(gè)重要概念:

抽象和分類:

抽象和分類是人們認(rèn)識(shí)世界的基本方法:

抽象是將現(xiàn)實(shí)世界中客觀存在的事務(wù)映射到意識(shí)中的一種方法。

分類是指確定這些抽象到意識(shí)中的概念之間的關(guān)系。

這些關(guān)系的基本形式包括一般到特殊和整體與局部。

一般到特殊(is a)用繼承(Inheritance)

整體與局部(have a)用組合(composition)

繼承的概念

繼承是由已有的類創(chuàng)建新類的機(jī)制。

由繼承得到的類稱為子類(派生類)

被繼承的類稱為父類(超類)(基類)

繼承的作用:

實(shí)現(xiàn)軟件可重用的重要方式

增強(qiáng)軟件可擴(kuò)充性

提高軟件的可維護(hù)性

聲明繼承

[<修飾符>] class<子類名> :(extends) <基類名>

Object類

C#語言中所有的類都是Object的直接或間接子類

可繼承的內(nèi)容:

子類繼承父類私有以外的成員變量

子類繼承父類私有以外的成員方法

子類繼承父類的析構(gòu)方法

子類可以重定義(隱藏\覆蓋)父類成員

子類可以增加自己獨(dú)有的成員

子類不能刪除父類的成員

子類不繼承父類的構(gòu)造方法


子類對(duì)象對(duì)父類成員的訪問權(quán)限:

子類可以訪問父類私有成員(private)以外的內(nèi)容

注意:受保護(hù)(protected)只能在子類內(nèi)訪問

子類中可重定義與父類成員同名的成員

此時(shí)父類的成員被隱藏

注意:

程序中會(huì)出現(xiàn)警告 警告不影響執(zhí)行

消除警告的方法:

在隱藏的屬性或方法上追加new關(guān)鍵字

base:

用來引用(指向)當(dāng)前對(duì)象的父類對(duì)象

用法:

訪問父類被隱藏的成員變量

如:

???base.variable;

調(diào)用父類中被覆蓋的方法

如:

???base.Method([paramlist]);

調(diào)用父類的構(gòu)造函數(shù)

如:

???:base([paramlist]);

注意:base維系了整個(gè)繼承關(guān)系

向上轉(zhuǎn)型

子類和父類具有is a的關(guān)系

例如:

父類“人”和子類“學(xué)生”:“學(xué)生”是“人”

父類“動(dòng)物”和子類“貓”:“貓”是“動(dòng)物”

因此:

父類的引用可以指代子類的實(shí)例

動(dòng)物=兔子

人=學(xué)生

以上稱之為:Upcasting\向上轉(zhuǎn)型

上轉(zhuǎn)型引用訪問范圍受限:

可以訪問子類繼承或覆蓋的成員;

不能訪問子類中新增(獨(dú)有)的成員

上轉(zhuǎn)型對(duì)象可以被重新賦值為子類引用

人=學(xué)生

學(xué)生=(學(xué)生)人

這時(shí)它又重新可以訪問子類中新增(獨(dú)有)成員

作用:

用一個(gè)引用處理各種子類對(duì)象

便于擴(kuò)展和維護(hù)項(xiàng)目

is 和 as

父=>子的時(shí)候往往會(huì)發(fā)生異常

子=(子)父;

原因:無法確認(rèn)父引用是否經(jīng)過向上轉(zhuǎn)型

is\as:父類型轉(zhuǎn)換為子類型的安全保障

is:

語法:

對(duì)象引用 is 類型

作用:檢測對(duì)象引用是否某個(gè)類型或其父類型

返回值:true\false

優(yōu)勢:適配所有類型(即使null)

劣勢:效率稍低

as:

語法:

對(duì)象引用 as 類型

作用:嘗試轉(zhuǎn)換對(duì)象引用為具體類型的引用

返回值:對(duì)象引用\null

優(yōu)勢:效率高

劣勢:僅適配引用類型

多態(tài):

提高程序的擴(kuò)展性

多態(tài)(polymorphism):

即一個(gè)名字具有多種語義。

在面向?qū)ο笾兄敢粋€(gè)方法可以有多種實(shí)現(xiàn)版本。

類的多態(tài)表現(xiàn)為方法的多態(tài)

方法的多態(tài):

重載(overload)和覆蓋(override)。

重載:

同一個(gè)“類”中

方法同名

參數(shù)列表不同:

1.個(gè)數(shù)不同

2.類型不同

3.次序不同

注意:返回值類型不同無法確定重載

覆蓋(重寫)

1.父子類中

2.父類的方法virtual修飾一下 形成虛方法

或者為抽象方法:abstract修飾

3.子類中的方法務(wù)必和父類的方法同名

override關(guān)鍵字修飾一下

4.其他的通通一樣(訪問修飾符 修飾符 返回值類型 參數(shù)列表)

靜態(tài)聯(lián)編(靜態(tài)多態(tài)性)

重載的方法由于參數(shù)列表不同

編譯時(shí)就可確定到底執(zhí)行哪個(gè)方法的代碼

因此重載又稱編譯時(shí)多態(tài)

動(dòng)態(tài)聯(lián)編(動(dòng)態(tài)多態(tài)性)

重寫/覆蓋的方法由于參數(shù)列表相同

編譯時(shí)無法確定到底執(zhí)行哪個(gè)(父\子)方法

運(yùn)行時(shí)依據(jù)內(nèi)存中對(duì)象的實(shí)際類型確定執(zhí)行哪個(gè)(父\子)方法

因此重寫/覆蓋又稱運(yùn)行時(shí)多態(tài)

調(diào)用原則:“是誰的對(duì)象就調(diào)用誰的方法”

從方法聲明角度(格式):

重載的兩個(gè)函數(shù)參數(shù)列表不同

覆蓋的兩個(gè)方法參數(shù)列表和返回值相同

從所處位置角度(位置):

重載的兩個(gè)方法在同一類中

覆蓋的兩個(gè)方法在有繼承關(guān)系的兩個(gè)類中

從方法調(diào)用角度(使用):

重載的方法被同一對(duì)象使用不同的參數(shù)調(diào)用

覆蓋的方法被不同對(duì)象使用相同參數(shù)調(diào)用

從多態(tài)時(shí)機(jī)角度(特性):

重載的方法在編譯時(shí)多態(tài)

覆蓋的方法在運(yùn)行時(shí)多態(tài)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容