C 中的物件導向程式設計

2022-04-06 11:32:45 字數 3636 閱讀 1091

所有的物件導向語言都具有3個基本特徵,c#也是不例外的。

1、封裝

封裝指的是把類內部的資料隱藏起來,不讓物件例項直接對其操作。在c#中,封裝可以通過public private protected和internal等關鍵字來體現。

c#對保護內部資料狀態提供了一種方式,叫做屬性機制。

public class person

set}

public int age

set_age=value;}}

}2、繼承

在c#中,乙個類可以繼承另外乙個已有的類,子類會獲得基類除建構函式和析構函式以外的所有成員。同時靜態類和密封類是不能被繼承的。

c#與c++不一樣,只支援單繼承。

//基類

public class animal

private int _age;

public int age

getset

if(value<0 || value>10)

_age=value;

//子類(馬)

public class horse:animal

//子類(羊)

public class sheep:animal

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

私有成員也會被子類繼承,但子類不能直接訪問私有成員,子類可以通過呼叫公有或保護方法來間接地對私有成員進行訪問。

2.1 密封類

public sealed class sealedclass

//在這裡定義類成員

//密封類不能作為其他類的基類,下面**編譯時會出錯

public class test :sealedclass

2.2 子類的初始化順序

當我們初始化乙個子類時,除了會呼叫子類的建構函式外,同時也會呼叫基類的建構函式。子類的初始化順序如下:

(1)初始化類的例項字段;

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

(3)呼叫子類的建構函式。

下面就通過乙個例項來說明:

//父類

public class parent

//②呼叫基類的建構函式

public parent()

console.writeline("基類的建構函式被呼叫了");

//子類

public class childa:parent

//建立乙個childa物件時

//①初始化它的例項字段

private int fielda=3;

//③呼叫子類建構函式

public childa()

console.writeline("子類的建構函式被呼叫");

public void print()

console.writeline(fielda);

class program

static void main(string args)

childa childa=new childa();

3、多型

多型的定義:即相同型別的物件呼叫相同的方法卻表現出不同行為的現象。

3.1 使用virtual和override關鍵字實現方法重寫

只有基類成員宣告為virtual或abstract時,才能被派生類重寫;而如果子類想改變虛方法的實現行為,則必須使用override關鍵字。

public class animal

private int _age;

public int age

getset

if(value<0 || value>10)

throw(new argumentoutofrangeexception("ageintproperty",value,"年齡必須在0-10之間"));

//幾乎所有動物都具有發出聲音的能力

//但是對於動物來說,每種動物發出的聲音是不一樣的

public virtual void voice()

console.writeline("動物開始發出聲音");

//馬(子類),子類應重寫基類的方法,以實現自己特有的行為

public class horse:animal

//通過override關鍵字來重寫父類方法

public override void voice()

console.writeline("馬叫");

//羊(子類)

public class sheep:animal

//通過override關鍵字來重寫父類方法

public override void voice()

console.writeline("羊叫");

class program

static void main(string args)

animal horse=new horse();//把子類物件賦給父類變數

horse.voice();

animal horse=new horse();//把子類物件賦給父類變數

horse.voice();

console.readkey();

如果在子類中還要訪問父類中虛的方法,就必須要用base關鍵字來完成呼叫。base.voice();

對於上面那種情況,建議把animal類設定成抽象類,採用abstract關鍵字來防止在**中直接建立這樣類的例項。

3.2 阻止派生類重寫虛成員

public class horse:animal

//採用sealed關鍵字,horse就不能再擴充套件voice方法了

publicsealed override void voice()

//呼叫基類方法

base.voice();

console.writeline("馬叫");

3.3 使用新成員隱藏基類成員

可以在子類中採用new的關鍵字來隱藏父類成員

public class horse:animal

public new void voice()

採用這樣的形式,如果要呼叫父類的方法,只能把物件強制轉換成父類型別。

4、所有類的父類

在c#中,所有的類都派生自system.object類,底下是object類的一些成員:

public class object

//方法

//建構函式

public object();

//虛成員,子類可以重寫這些方法

public virtual bool equals(object obj);

protected virtual void finalize();

public virtual int gethashcode();

public virtual string tostring();

//例項成員

public type gettype();

public object memberwiseclone();

//靜態成員

public static bool equals(object obja,object objb);

public static bool referenceequals(object obja,object objb);

C 中的物件導向程式設計

繼承密封類 子類的初始化順序 多型所有類的父類systemobject c 中的物件導向程式設計是指3個基本特徵 封裝 繼承 多型。當類的內部資料沒有被封裝時,若把字段定義為公共字段,則外部物件可以對內部資料進行任意的操作,很可能導致不當的操作結果。例如 public class person cl...

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

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

程式語言 C 中的物件導向

最近終於學到了c 了,真的很高興啊!畢竟是要從面向過程跳到物件導向的時候了,雖然以前學過c 但是還是覺得自己的物件導向的思想很不做,希望通過對c 的學習能夠打下乙個堅實的基礎,然後在這個基礎上再學習其他新的物件導向語言就不是事兒了。一 介紹篇 c 是一種安全的 穩定的 簡單的 優雅的,由c和c 衍生...