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

1:接口的定義

interface 接口名

{

    接口成員;

}

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

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

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

接口成員只能有聲明,不能有實現。

不用用關鍵字static、virtual、abstract或sealed來定義接口成員。

Type definition members are forbidden.(不懂)


2:抽象類和抽象方法

抽象類是用關鍵字abstract修飾的類。

抽象類不能被實例化。

抽象方法是用關鍵字abstract修飾的方法。

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

抽象方法不能有方法體。

如果子類繼承了一個抽象類,那麼這個子類必須要實現抽象類的所有抽象方法;否則,這個子類也必須是抽象類。

子類在實現抽象方法時,必要要使用關鍵字override。


3:虛方法

虛方法是用關鍵字virtual修飾的方法。

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

虛方法要有方法體。

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

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


4:override和new

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

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


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

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

對於覆蓋的方法在調用時的區別:

    子類的引用指向子類的對象,調用的是子類的方法;

    父類的引用指向子類的對象,調用的是父類的方法。


如果想要在使用父類的引用指向子類的對象時,調用子類的方法(這也是使用多態的一般目的),那麼需要:將父類的方法聲明爲虛擬方法或抽象方法;在子類中使用override關鍵字進行方法重寫。


5:顯式的調用父類的方法

base.方法名(參數列表)


6:顯式的調用自己的方法

this.方法名(參數列表)


7:實現接口中的方法(還要整理一下)

繼承了接口的類必須要實現接口中所有方法,除了可以將接口中的方法實現爲普通方法外,也可以將接口中的方法實現爲虛擬方法或抽象方法。

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章