剛學習了c#繼承和多型,對virtual、override、seal override、new有點了解,在此寫下這篇文章以供以後參考,若有錯誤或不足,還望各位指出。
這裡有3個類,分別是grandfather、father、son。好,我們現在來分析一下grandfather的遺產怎麼讓father繼承,son又怎麼處理從father繼承的遺產。
class grandfather
protected
virtual
void
legacy2()
protected
virtual
void
legacy3()
}class father: grandfather
//隱藏(hide)基類成員,重新定義非virtual基類成員時需要使用new,
//可以看出返回型別可以修改,但是不能改變簽名
public
newint
legacy2() //沒有new會有警告
// 將繼承的方法重寫並密封,子類不會再重寫
protected
sealed
override
void
legacy3()
}class son: father
//此方法是錯誤的,並有重寫父類的父類的方法,只能重寫父類的方法,此時需要在父類加上virtual關鍵字
//public override int legacy2(int id)
//// 這是新的方法,沒有重寫
protected
newvoid
legacy3()
}
首先,我們看看第乙份遺產legacy1(),grandfather宣告virtual的,告訴father:你可以拿掉我這份遺產將其發揚光大(override)。father總算沒有敗家,又將其傳給了son,son又再一次將其發揚光大(override)。
接著來看看第二份遺產legacy2(),grandfather依然告訴father,你可以繼承我這份遺產。誰知,father很爭氣,要自己另立門戶new了乙個,但是招牌(簽名)還是沒丟掉,只是改變了管理的方式。好了終於到了son了,son想「子承父業」想將legacy2()發揚光大(重寫),但是發現「老子」真不靠譜,竟然沒給繼承。此時,想起爺爺來了,就跑去問阿爺要。誰知,中間隔了個「老子」,想繼承也繼承不了。後來死皮賴臉地去求老子給virtual一下legacy2(),老子沒答應,就放棄了。
最後,看看第三份遺產legacy3(),這老子grandfather真給力,什麼都給father了,真特麼是親生的。兒子也是「爭氣」啊,毫無保留地留給自己了,連自己的兒子son都不給了sealed override,估計發現兒子姓王了。那麼son就是只能自己白手起家new乙個了。
本人知識有限,若有不對,還望指出。
C 繼承和多型
在c 的物件導向的大家庭裡,我感覺繼承算是很重要的了,因為有很多的東西都是依賴於繼承和多型的,所以單獨的在第三篇部落格裡做總結和昇華。繼承在面相物件的地方是乙個很是重要的東西,可以說在物件導向的世界裡沒有了繼承就沒有了這麼多的東西,而沒有了多型就沒有了多彩的世界。類的繼承是最為普遍的事情了,可是類又...
C 繼承和多型
繼承是使 復用的一種機制。本質 單繼承 乙個派生類乙個基類派生。多繼承 乙個派生類有兩個人或者多個基類。如 馬與驢雜交所生的騾子就有兩個基類,騾子既繼承了馬的一些特徵,也繼承了驢的一些特徵 構造派生類包括 1 從基類接收成員 派生類接收基類的全部成員,沒有選擇 2 調整從基類接收的成員 可以改變基類...
c 繼承和多型
01 什麼是繼承?舉例說明 public class em public int age public class eb em public int yearof 02 什麼是多型?舉例說明 public virtual string sauhi public override string say...