封裝就是將成員變數和成員方法等集合在乙個個的類中,通過給類及類中的成員變數、屬性和方法設定不同的訪問修飾符(public、protected、internal、protected internal、private)來控制它們的作用範圍,使用時呼叫它的方法,或者給它的變數賦值。封裝的意義在於保護或者防止**(資料)被我們無意中破壞。
書面的解釋如下:
每個物件都包含它能進行操作所需要的所有資訊,因此物件不必依賴其它的物件來完成自己的操作。
以人為例,每個人都有姓名,年齡,和吃穿住行等行為。如果我們把每個人的**都寫出來,這些將有很多重複,而且**量太大。如果只構建乙個人類,其他的人可以直接使用他的屬性和方法,將會給我們帶來大大的便利。這就是繼承。
注意:
1.繼承具有傳遞性,由a:b b:c=>a:c
2.構造方法不能繼承
3.c#只允許單繼承,乙個類只能繼承於乙個父類
4.方法名相同(方法重寫),最終使用的是子類的方法。
5.子類擁有父類非private的屬性和功能;比如protected表示繼承時子類可以對基類有完全訪問權,也就是說,用protected修飾的類成員,對子類公開,但不對其他類公開。
書面的解釋如下:
物件的繼承代表一種"is-a"的關係,假如兩個物件a和b,如果可以描述為"b就是a",那麼則表示b可以繼承自a。
多型性是指「多種行為」。同樣的方法呼叫後,執行不同的操作,執行不同的**,在不同的類中有不同的體現。多型性可以簡單概述為「乙個介面,多種方法」。
多型分為靜態多型和動態多型。靜態多型,函式的響應是發生在編譯時;動態多型,函式的響應是發生在執行時。
靜態多型:
分別為函式過載和運算子過載。
函式過載:同乙個類中有多個方法的名稱相同、引數個數不同或型別不同。(同乙個類中有多個方法名稱相同、引數個數相同、引數型別相同、返回值型別不同,這樣不屬於過載,編譯時會報錯。)
函式過載舉例:
using system;
", i );
}void print(double f)
" , f);
}void print(string s)
", s);
}static void main(string args)
}}
結果:
printing int: 5
printing float: 500.263
printing string: hello c++
呼叫同樣名稱的方法,因為引數型別不同,結果不同。
動態過載:
c# 允許您使用關鍵字 abstract 建立抽象類,用於提供介面的部分類的實現。當乙個子類繼承自該抽象類時,實現即完成。抽象類包含抽象方法,抽象方法可被子類實現。子類具有更專業的功能。動態多型性是通過 抽象類 和 虛方法 實現的。
請注意,下面是有關抽象類的一些規則:
您不能建立乙個抽象類的例項。
您不能在乙個抽象類外部宣告乙個抽象方法。
通過在類定義前面放置關鍵字 sealed,可以將類宣告為密封類。當乙個類被宣告為 sealed 時,它不能被繼承。抽象類不能被宣告為 sealed。
當有乙個定義在類中的函式需要在繼承類中實現時,可以使用虛方法。虛方法是使用關鍵字 virtual 宣告的。虛方法可以在不同的繼承類中有不同的實現。對虛方法的呼叫是在執行時發生的。
重寫:函式名和引數完全相同只不過內部實現不同,不能同時處於乙個類的內部。
多型通過虛函式(virtual)來實現,虛函式允許子類重新定義成員函式,子類重新定義父類的做法叫做重寫。重寫分為兩種:直接重寫成員函式和重寫虛函式,只有重寫了虛函式才能更好的體現c#的多型。
1、繼承時父類中的內容需要封裝。通過訪問修飾符,來限制訪問,如有些方法子類不能使用,則用private來修飾。
物件導向三大特性
什麼是物件導向呢?之前我們做一件事的時候,常常是確定,先幹什麼,然後怎麼做,最後可以完事了。其實我們不妨這麼想一下,我們做事的時候是可以這樣的 這件事中涉及了什麼物件角色?如果我要把這件事做成那麼就需要物件之間是如何協作的?第二種方法,就是今天說的物件導向的方法了,好處正在慢慢體會。今天我想說的物件...
物件導向三大特性
0x00 嘮嘮叨叨 只是做乙個概念的記錄 0x01 物件導向的三大特性 n 封裝 把客觀事物封裝成抽象的類,並且類可以把自己的資料和方法只讓可信的類或者物件操作,對不可信的進行資訊隱藏。類將成員變數和成員函式封裝在類的內部,根據需要設定訪問許可權,通過成員函式管理內部狀態。n 繼承 繼承所表達的是類...
物件導向三大特性
封裝 oo將萬物都視為 物件 object 任何物件都具有特性和行為。我們將其特性稱為 成員變數 membervarible 將其行為稱之為 成員函式 member function 被封裝的特性只能通過特定的行為去訪問。好處 良好的封裝可以降低耦合度 類的內部可以自由修改 類具有對外的清晰介面。繼...