所有的物件導向語言都具有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 衍生...