c 物件導向程式設計

2021-10-13 10:08:12 字數 3068 閱讀 8770

目錄

封裝--把客觀事物封裝成類,並將類內部的實現隱藏,以保證資料的完整性;

繼承--通過繼承可以復用父類中的**

多型--允許將子物件賦值給父物件的一種能力

多型的實現方式

1.使用virtual和override關鍵字實現方法的重寫

2.使用abstract和override關鍵字實現方法的重寫

3.virtual和abstract的區別

c#是物件導向語言,所有物件導向語言的3個基本特性封裝、繼承、多型

封裝--把客觀事物封裝成類,並將類內部的實現隱藏,以保證資料的完整性;

物件導向程式設計中的封裝特性,是一種保護狀態資料完整性的方法,在物件導向程式設計過程中應多使用私有的資料字段。c#提供了屬性機制來對這種私有字段資料進行簡介的操作,並且可以在屬性的定義中加入邏輯判斷。利用封裝技術我們可以有效的對外部隱藏內部的資料,從而避免資料損壞。下面為演示**:

public class person

public int age

_age = value;}}

}

注意:屬性建立快捷鍵  ctrl+r+e

繼承--通過繼承可以復用父類中的**

在c#中,乙個類可以繼承另外乙個已有的類(sealed除外),被繼承的類稱為基類(或父類),繼承的類稱為派生類(子類),子類將獲得基類出了建構函式和析構函式的所有成員。此外靜態類也是密封的,也不能被繼承。

通過繼承程式可以對父類**實現復用,因為子類可以繼承父類中的所有成員,父類中定義的**不用在子類中重複定義,減少**冗餘問題;

public class person

public int age

_age = value;}}

}public class men : person

public class women : person

在以上**中雖然,子類並沒有定義age屬性,但是由於他們繼承於person,基類中定義了 age屬性,所以子類繼承了父類中的屬性,通過繼承避免了重複定義age,從而達到**復用的目的。

需要注意的是,子類並不能對父類中的私有成員進行直接訪問,只能對保護成員和公有成員進行訪問。

子類的初始化順序

初始化類的例項型別

呼叫基類的建構函式,如果沒有指明基類,則呼叫system.object的建構函式

呼叫子類的建構函式

多型--允許將子物件賦值給父物件的一種能力

由於可以繼承基類的所有成員,子類就都有了相同的行為,但是有時子類的某些行為需要相互區別,子類需要複寫父類中的方法來實現子類特有的行為,這樣的技術在物件導向程式設計中稱為多型。多型即相同型別的物件在呼叫相同方法卻表現不同行為的現象。

多型的實現方式

1.使用virtual和override關鍵字實現方法的重寫

class program

}public class animal

_age = value;}}

//幾乎所有的動物都能發出聲音,但不同的動物發出的聲音不一樣

public virtual void voice()

}public class horse : animal

}public class sheep : animal

}

上面的**通過使用virtual關鍵字,把需要在子類中表現為不同行為的方法定義為虛方法,然後再子類中使用override關鍵字對基類方法進行重寫。這樣每個基類在呼叫相同方法時將表現出不同的行為,這段**正是c#中多型的體現;

如果子類還想繼續訪問基類方法的話,則可以使用base關鍵字完成呼叫。**執行結果如下:

2.使用abstract和override關鍵字實現方法的重寫

class program

}public abstract class animal

_age = value;}}

//幾乎所有的動物都能發出聲音,但不同的動物發出的聲音不一樣

public abstract void voice();

}public class horse : animal

}public class sheep : animal

}

3.virtual和abstract的區別

先來看abstract方法,顧名思義,abstract方法就是抽象方法。

1、抽象方法就是沒有實現的,必須是形如:

public abstract void init();
2、擁有抽象方法的類必須修飾乙個abstract關鍵字從而變成乙個抽象類;但是反過來,抽象類裡面不一定要有抽象方法,比如我寫了乙個非抽象類,但是這個類我不想讓人直接例項化,而只讓人繼承,我就可以把他變成乙個抽象類,雖然他裡面並沒有抽象方法。形如:

abstract class testabstractsuper
3、抽象類不能被例項化,只能被繼承。

4、抽象類的子類必須實現每個抽象方法。

5、抽象類裡面除了可以有抽象方法以外,也可以有普通的方法。

6、抽象類的建構函式可以省略,編譯器會自動加上,但是不能是乙個抽象方法,而只能是乙個普通的建構函式。

小結:簡單概括一下,抽象類不可以直接例項化,他可以有n個(n>=0)抽象方法,這些抽象方法子類必須實現。

再說virtual,他有幾個特點:

1、宣告了virtual的方法無需去改動類的宣告,他只在此方法上起到影響。

2、只有virtual的方法可以被子類override。

3、子類可以不ouverride父類的virtual方法,這種情況下他就像普通的父類方法一樣。

小結:簡單概括一下,virtual關鍵字就是告訴子類,此方法可以被override,但非強制。

c 物件導向程式設計 物件導向

什麼是物件導向 是對現實世界理解和抽象的方法。物件導向程式設計的特點 易維護,易擴充套件,靈活性好,重用 類 對事物的抽象定義,即事物具有的共同特徵和行為。物件 即對類進行例項 類是抽象的,物件是具體的 類的定義 語法 訪問修飾符 class 類名類的成員 包括字段,屬性,方法,常量,事件和索引器等...

C 物件導向程式設計

1.1 類與物件 物件 object 是類 class 的乙個例項 instance 如果將物件比作房子,那麼類就是房子的設計圖紙。所以物件導向程式設計的重點是類的設計,而不是物件的設計。類可以將資料和函式封裝在一起,其中函式表示了類的行為 或稱服務 類提供關鍵字public protected 和...

C 物件導向程式設計

物件導向程式設計 以物件為中心,將資料和方法封裝在一起。三要素 抽象繼承 多型 五個基本原則 單一職責原則 就乙個類而言,應該有且僅有乙個引起它變化的原因。開放 封閉原則 是說軟體實體 類 模組 函式等等 應該可以擴充套件,但是不可修改。黎克特制替換換原則 子類應當可以替換父類並出現在父類能夠出現的...