C#中面向?qū)ο缶幊虣C(jī)制之繼承學(xué)習(xí)筆記
繼承反應(yīng)了類(lèi)和類(lèi)之間的關(guān)系。
世界上很多事物都是有共性的,共性的那一部分我們就抽象為基類(lèi),用于派生其它類(lèi),這樣提高了代碼的復(fù)用性,使得代碼的結(jié)構(gòu)清晰易讀,而且易于代碼的擴(kuò)展和維護(hù)。
C#的繼承只能繼承自一個(gè)基類(lèi),這一點(diǎn)不同于C++的繼承。
C#的繼承具有傳遞性,即B繼承自A,C繼承自B,則C具有A的所有特性。
C#的繼承隱式為public的。
假如不在派生類(lèi)構(gòu)造器中顯示調(diào)用一個(gè)基類(lèi)構(gòu)造器,編譯器會(huì)自動(dòng)插入對(duì)基類(lèi)的默認(rèn)構(gòu)造器的一個(gè)調(diào)用,然后才會(huì)執(zhí)行派生類(lèi)構(gòu)造器中的代碼, 如果基類(lèi)沒(méi)有默認(rèn)的構(gòu)造器,會(huì)造成編譯錯(cuò)誤。
舉例:動(dòng)物的共性:有嘴巴,有眼睛,有鼻子,可以移動(dòng),能夠吃東西
所以定義基類(lèi) (包含動(dòng)物的共性)
public class Animal {
......
}
再定義具體的動(dòng)物的時(shí)候就可以繼承自基類(lèi)Animal,不用再重新定義這些基本的特征,只定義自己獨(dú)有的特性就好。
例如:Dog
public class Dog:Animal
{
//編譯器會(huì)自動(dòng)插入對(duì)基類(lèi)的默認(rèn)構(gòu)造器的一個(gè)調(diào)用,然后才會(huì)執(zhí)行派生類(lèi)構(gòu)造器中的代碼
public string Bark;//狗叫聲
}
public class Dog : Animal {
//在派生類(lèi)構(gòu)造器中顯示調(diào)用一個(gè)基類(lèi)構(gòu)造器
public Dog()
: base() {
}
public string Bark;
}
注意:
可以把一個(gè)派生類(lèi)的值賦給基類(lèi),但不能把一個(gè)基類(lèi)的值賦給派生類(lèi),因?yàn)榛?lèi)不能轉(zhuǎn)換為派生類(lèi),基類(lèi)中只包含了派生類(lèi)的一部分特性。
Animal animal=new Dog(); 正確的
Dog dog=new Animal();錯(cuò)誤
相關(guān)文章
C#短時(shí)間內(nèi)產(chǎn)生大量不重復(fù)的隨機(jī)數(shù)
在C#編程中,經(jīng)常會(huì)碰到產(chǎn)生隨機(jī)數(shù)的情況,并且是在短時(shí)間內(nèi)產(chǎn)生一組隨機(jī)數(shù)。如果這組隨機(jī)數(shù)中有大量重復(fù)的,則達(dá)不到我們的要求2013-02-02C#實(shí)現(xiàn)根據(jù)圖片的鏈接地址獲取圖片的后綴名
這篇文章主要為大家詳細(xì)介紹了C#如何實(shí)現(xiàn)根據(jù)圖片的鏈接地址獲取圖片的后綴名,文中的實(shí)現(xiàn)方法講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2023-02-02Unity Shader實(shí)現(xiàn)黑幕過(guò)場(chǎng)效果
這篇文章主要為大家詳細(xì)介紹了Unity Shader實(shí)現(xiàn)黑幕過(guò)場(chǎng)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07winform開(kāi)發(fā)使用通用多線程基類(lèi)分享(以隊(duì)列形式)
多線程這個(gè)概念大家都很熟悉,對(duì)于winform的開(kāi)發(fā)人員來(lái)說(shuō),用的還是多的.但估計(jì)都是用Timer,或者backgroundWorker,為大家寫(xiě)了一個(gè)多線程的基類(lèi),只有你用到多線程拿過(guò)來(lái)就可以用了2013-12-12