溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C#中的類:接口、抽象類、抽象方法、虛擬方法

發(fā)布時(shí)間:2020-06-24 13:15:46 來源:網(wǎng)絡(luò) 閱讀:634 作者:mista 欄目:編程語(yǔ)言

1:接口的定義

interface 接口名

{

    接口成員;

}

接口名必須以大寫的英文字母I開頭。

接口中不能定義字段,也就是說接口中只能包含屬性、方法和事件的定義。

定義接口成員時(shí)不可使用訪問修飾符,所有的接口成員都被隱式的定義為公有的。

接口成員只能有聲明,不能有實(shí)現(xiàn)。

不用用關(guān)鍵字static、virtual、abstract或sealed來定義接口成員。

Type definition members are forbidden.(不懂)


2:抽象類和抽象方法

抽象類是用關(guān)鍵字abstract修飾的類。

抽象類不能被實(shí)例化。

抽象方法是用關(guān)鍵字abstract修飾的方法。

抽象方法只能被定義在抽象類中。

抽象方法不能有方法體。

如果子類繼承了一個(gè)抽象類,那么這個(gè)子類必須要實(shí)現(xiàn)抽象類的所有抽象方法;否則,這個(gè)子類也必須是抽象類。

子類在實(shí)現(xiàn)抽象方法時(shí),必要要使用關(guān)鍵字override。


3:虛方法

虛方法是用關(guān)鍵字virtual修飾的方法。

虛方法可以定義在普通類和抽象類中。

虛方法要有方法體。

父類的虛方法可以被子類直接繼承。

子類可以使用override關(guān)鍵字重寫父類的虛方法,也可以使用new關(guān)鍵字隱藏父類的虛方法。


4:override和new

override:重寫父類的方法(抽象方法、虛擬方法)

new:覆蓋(隱藏)父類的方法(普通方法、虛擬方法)


對(duì)于父類的普通方法(非虛擬方法和抽象方法),如果在子類中又定義了相同聲明的方法,那么就是子類覆蓋了(或隱藏了)父類的同名方法。

雖然在子類中可以直接用相同的方法聲明來書寫新的方法,但C#建議應(yīng)該在方法聲明的開頭加上new關(guān)鍵字。

對(duì)于覆蓋的方法在調(diào)用時(shí)的區(qū)別:

    子類的引用指向子類的對(duì)象,調(diào)用的是子類的方法;

    父類的引用指向子類的對(duì)象,調(diào)用的是父類的方法。


如果想要在使用父類的引用指向子類的對(duì)象時(shí),調(diào)用子類的方法(這也是使用多態(tài)的一般目的),那么需要:將父類的方法聲明為虛擬方法或抽象方法;在子類中使用override關(guān)鍵字進(jìn)行方法重寫。


5:顯式的調(diào)用父類的方法

base.方法名(參數(shù)列表)


6:顯式的調(diào)用自己的方法

this.方法名(參數(shù)列表)


7:實(shí)現(xiàn)接口中的方法(還要整理一下)

繼承了接口的類必須要實(shí)現(xiàn)接口中所有方法,除了可以將接口中的方法實(shí)現(xiàn)為普通方法外,也可以將接口中的方法實(shí)現(xiàn)為虛擬方法或抽象方法。

如果在實(shí)現(xiàn)接口的類中實(shí)現(xiàn)接口中的方法時(shí),在方法名之前加上了接口名限定符(即:接口名.方法名),這種方式稱為“顯式的實(shí)現(xiàn)接口成員”,被顯式實(shí)現(xiàn)的接口成員只能被接口類型的變量調(diào)用。


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI