在部落格園也潛水了幾年了,看了很多,記的卻很少。在幾年程式員的工作經驗下來之後,開始發現,自己做的項目確實很多,但是正的自己沉澱下來屬於一點自己的東西卻幾乎沒有。正好利用公司這段閒置時間,買來幾本書看看,正所謂溫故而知新,也好好的梳理一下以前不太關注的一些基礎知識,也希望能給一些新手提供一些協助
今天需要記錄的關於繼承中抽象類別相關的基礎知識
- 抽象類別和抽象函數
抽象類別的定義就是關鍵字 abstract 抽象類別不能執行個體化,抽象函數也不執行個體化,必須在非抽象的衍生類別中重寫。抽象函數本身就是虛擬,是不需要用virtual修飾的,如果用了會產生一個錯誤。如果類包含抽象方法,該類必須聲明是抽象的。
- 密封類和密封方法
把類和方法聲明為sealed,表示為密封的。密封的類不能繼承,密封的方法不能重寫。
一般聲明sealed最有可能的的情形:如果要對庫、類或自己編寫的其他類作用於域外的類或方法進行操作,則重寫某些功能會導致代碼混亂。也可以因商業原油吧類或者方法標記為sealed,以防第三方以違授權協議的方式擴充。
- 衍生類別和建構函式
建構函式的執行是按照階層由上至下進行,直到達到編譯器要執行個體化的類為止。在這個過程中,每個建構函式都初始化他自己類中的欄位。所以我們在添加自己的建構函式的時候,也盡量遵循這樣的原則。
建構函式的執行順序。總是最先調用基類中的建構函式。也就是說,如果衍生類別的建構函式可以在執行過程中調用他可以訪問的任何基類方法,屬性和任何其他成員,因為基類已經構造出來了,其他欄位也初始化了。public abstract class MyBaseAbsClass
{
private string name;
public MyBaseAbsClass() { } public MyBaseAbsClass(string name)
{
Console.WriteLine(1);
this.name = name;
}
}
public class SubClass1 : MyBaseAbsClass
{
private string referrerName; SubClass1() { }
public SubClass1(string name)
: base(name)
{
Console.WriteLine(3);
}
public SubClass1(string name, string referrerName)
: base(name)
{
Console.WriteLine(2);
this.referrerName = referrerName;
}
}