學習C#接口繼承
C#接口具有不變性,但這并不意味著接口不再發(fā)展。類似于類的繼承性,接口也可以繼承和發(fā)展。
注意:C#接口繼承和類繼承不同,首先,類繼承不僅是說明繼承,而且也是實現(xiàn)繼承;而接口繼承只是說明繼承。也就是說,派生類可以繼承基類的方法實現(xiàn),而派生的接口只繼承了父接口的成員方法說明,而沒有繼承父接口的實現(xiàn),其次,C#中類繼承只允許單繼承,但是接口繼承允許多繼承,一個子接口可以有多個父接口。
接口可以從零或多個接口中繼承。從多個接口中繼承時,用":"后跟被繼承的接口名字,多個接口名之間用","分割。被繼承的接口應該是可以訪問得到的,比如從private類型或internal類型的接口中繼承就是不允許的。接口不允許直接或間接地從自身繼承。和類的繼承相似,接口的繼承也形成接口之間的層次結構。
請看下面的C#接口繼承例子:
對一個接口的繼承也就繼承了接口的所有成員,上面的例子中接口ITextBox和IListBox都從接口IControl中繼承,也就繼承了接口IControl的Paint方法。接口IComboBox從接口ITextBox和IListBox中繼承,因此它應該繼承了接口ITextBox的SetText方法和IListBox的SetItems方法,還有IControl的Paint方法。
一個類繼承了所有被它的基本類提供的C#接口實現(xiàn)程序。
不通過顯式的實現(xiàn)一個接口,一個派生類不能用任何方法改變它從它的基本類繼承的接口映射。例如,在聲明中:
TextBox中的方法Paint隱藏了Control中的方法Paint,但是沒有改變從Control.Paint到IControl.Paint 的映射,而通過類實例和接口實例調(diào)用Paint將會有下面的影響。
但是,當一個接口方法被映射到一個類中的虛擬方法,派生類就不可能覆蓋這個虛擬方法并且改變接口的實現(xiàn)函數(shù)。例如,把上面的聲明重新寫為:
就會看到下面的結果:
由于顯式C#接口成員實現(xiàn)程序不能被聲明為虛擬的,就不可能覆蓋一個顯式接口成員實現(xiàn)程序。一個顯式接口成員實現(xiàn)程序調(diào)用另外一個方法是有效的,而另外的那個方法可以被聲明為虛擬的以便讓派生類可以覆蓋它。例如:
這里,從Control繼承的類可以通過覆蓋方法PaintControl來對IControl.Paint的實現(xiàn)程序進行特殊化。以上就是有關C#接口繼承的介紹。
【編輯推薦】