c 封裝,繼承,多型

2021-07-03 23:17:51 字數 3019 閱讀 9364

一、  封裝:

封裝是實現物件導向程式設計的第一步,封裝就是將資料或函式等集合在乙個個的單元中(我們稱之為類)。被封裝的物件通常被稱為抽象資料型別。

物件導向程式設計中一般以類作為資料封裝的基本單位。類將資料和運算元據的方法結合成乙個單位。在設計類時,不希望直接訪問類中的資料,而是希望通過方法來訪問資料。如此就可以達到封裝資料的目的,方便以後維護、公升級,也可以在運算元據時多一層判斷,提高安全性。

在c#中可使用類來達到資料封裝的效果,這樣就可以使資料與方法封裝成單一元素,以便於通過方法訪問資料。除此之外,還可以控制資料的訪問方式。封裝在c#中可使用類來達到資料封裝的效果,這樣就可以使資料與方法封裝成單一元素,以便於通過方法訪問資料。除此之外,還可以控制資料的訪問方式。

封裝的意義:

封裝的意義在於保護或者防止**(資料)被我們無意中破壞。在物件導向程式設計中資料被看作是乙個中心的元素並且和使用它的函式結合的很密切,從而保護它不被其它的函式意外的修改。

封裝還可以解決資料訪問許可權問題,使用封裝可以將資料隱藏起來,形成乙個封閉的空間,使用者可以設定哪些資料只能在這個空間中使用,哪些資料可以在空間外部使用。如果乙個類中包含敏感資料,則有些使用者可以訪問,有些使用者卻不能訪問。如果不對這些資料的訪問加以限制,那麼後果是很嚴重的。所以,在編寫程式時,要對類的成員使用不同的訪問修飾符,從而定義它們的訪問級別。

封裝提供了乙個有效的途徑來保護資料不被意外的破壞。相比我們將資料(用域來實現)在程式中定義為公用的(public)我們將它們(fields)定義為私有的(privat)在很多方面會更好。私有的資料可以用兩種方式來間接的控制。第一種方法,我們使用傳統的存、取方法。第二種方法我們用屬性(property)。

使用屬性不僅可以控制訪問資料的合法性,同時也提供了「讀寫」、「唯讀」、「只寫」靈活的操作方法。

訪問修飾符:

private:只有類本身能訪問.

protected:類和派生類可以訪問.

internal:只有同乙個專案中的類可以訪問.

protected internal:是protected和internal的結合.

public:完全訪問.

二、  繼承:

繼承是oop最重要的特性之一。任何類都可以從另外乙個類繼承,即這個類擁有它所繼承類的所有成員。在oop中,被繼承的類稱為父類或基類。c#提供了類的繼承機制,但c#只支援單繼承,不支援多重繼承,即在c# 中一次只允許繼承乙個類,不能同時繼承多個類。

利用繼承機制,使用者可以通過增加、修改或替換類中方法對這個類進行擴充,以適應不同的應用要求。利用繼承,程式開發人員可以在已有類的基礎上構造新類。繼承使得類支援分類的概念。在日常生活中很多東西比較有條理,那是因為它們有著很好的層次分類。如果不用層次分類,則要對每個物件定義其所有的性質。使用繼承後,每個物件就可以只定義自己的特殊性質。每一層的物件只需定義本身的性質,其他性質可以從上一層繼承下來。

在c#中,介面允許多繼承,可以通過繼承多個介面來實現類似於c++中的多重繼承。在繼承乙個基類時,成員的可訪問性是乙個重要的問題。子類不能訪問基類的私有成員,但是可以訪問其公共成員。子類和外部**都可以訪問公共成員。這就是說,只使用這兩個可訪問性,就可以讓乙個成員被基類和子類訪問,同時也可以被外部的**訪問。

為了解決這個問題,c# 還提供了第3種可訪問性:protected。只有派生類才能訪問protected成員,基類和外部**都不能訪問protected成員。

除了成員的保護級別外,使用者還可以為成員定義其繼承行為。基類的成員可以是虛擬的,成員可以由繼承它的類重寫。子類可以提供成員的其他執行**。這種執行**不會刪除原來的**,仍可以在類中訪問原來的**,但外部**不能訪問它們。如果沒有提供其他執行方式,外部**就訪問基類中成員的執行**。

虛擬成員不能是私有成員,因為成員不能同時由子類重寫,也不能訪問它。基類還可以定義為抽象類。抽象類不能直接例項化,要使用抽象類就必須繼承這個類,然後再例項化。

繼承主要實現重用**,節省開發時間。

1、c#中的繼承符合下列規則:

1. 繼承是可傳遞的。如果c從b中派生,b又從a中派生,那麼c不僅繼承了b中宣告的成員,同樣也繼承了a中的成員。object類作為所有類的基類。

2. 派生類應當是對基類的擴充套件。派生類可以新增新的成員,但不能除去已經繼承的成員的定義。

3. 建構函式和析構函式不能被繼承。除此之外的其它成員,不論對它們定義了怎樣的訪問方式,都能被繼承。基類中成員的訪問方式只能決定派生類能否訪問它們。

4. 派生類如果定義了與繼承而來的成員同名的新成員,就可以覆蓋已繼承的成員。但這並不因為這派生類刪除了這些成員,只是不能再訪問這些成員。

5. 類可以定義虛文法、虛屬性以及虛索引指示器,它的派生類能夠過載這些成員,從而實現類可以展示出多型性。

2、new關鍵字

如果父類中宣告了乙個沒有friend修飾的protected或public方法,子類中也宣告了同名的方法。則用new可以隱藏父類中的方法。(不建議使用)

3、base關鍵字

base 關鍵字用於從派生類中訪問基類的成員:

1. 呼叫基類上已被其他方法重寫的方法。

2. 指定建立派生類例項時應呼叫的基類建構函式。

三、多型

1、多型:同一操作作用於不同的物件,可以有不同的解釋,產生不同的執行結果。在執行時,可以通過指向基類的指標,來呼叫實現派生類中的方法。

編譯時的多型性:是通過過載來實現的。(過載是讓類以統一的方式處理不同型別資料的一種手段。在c#中,語法規定同乙個類中兩個或兩個以上的方法可以用同乙個名字,如果出現這種情況,那麼該方法就被稱為過載方法.當乙個過載方法被呼叫時,c#會根據呼叫該方法的引數自動呼叫具體的方法來執行.對於方法的使用者來講,這種技術是非常有用的。)對於非虛的成員來說,系統在編譯時,根據傳遞的引數、返回的型別等資訊決定實現何種操作。

執行時的多型性:就是指直到系統執行時,才根據實際情況決定實現何種操作。c#中,執行時的多型性通過虛成員實現。

編譯時的多型性為我們提供了執行速度快的特點,而執行時的多型性則帶來了高度靈活和抽象的特點。

2、實現多型:

1. 介面多型性。

2. 繼承多型性。

3. 通過抽象類實現的多型性。

3、override關鍵字:

重寫父類中的virtual修飾的方法,實現多型。

C 封裝 繼承 多型

物件導向的三個基本特徵 物件導向的三個基本特徵是 封裝 繼承 多型。其中,封裝可以隱藏實現細節,使得 模組化 繼承可以擴充套件已存在的 模組 類 它們的目的都是為了 重用。而多型則是為了實現另乙個目的 介面重用!封裝 什麼是封裝?封裝可以隱藏實現細節,使得 模組化 封裝是把過程和資料報圍起來,對資料...

c 封裝,繼承,多型

c 中可使用類來達到資料封裝的效果,這樣可以使資料與方法封裝成單一元素,以便於通過方法訪問資料。除此之外,還可以控制資料的訪問方式。在物件導向程式設計中,大多數都是以類作為資料封裝的基本單位。類將資料和運算元據的方法結合成乙個單位。設計類時,不希望直接訪問類中的資料,而是希望通過方法來訪問資料。這樣...

C 封裝 繼承 多型

c 的封裝 封裝的是實現物件導向的第一步,封裝就是將資料 函式等集合在乙個單元也就是類中,封裝的目的是使得 模組化 封裝的意義在於增強安全性和簡化程式設計,使用者不必了解具體的實現細節,而只是通過外部介面以及特定的訪問許可權來使用類成員。c 定義了友元函式能夠訪問類中的私有函式 友元函式 eg 封裝...