第七節、覆蓋虛接口
有時候我們需要表達一種抽象的東西,它是一些東西的概括,但我們又不能真正的看到它成為一個實體在我們眼前出現,為此面向對象的編程語言便有了抽象類的概念。C#作為一個面向對象的語言,必然也會引入抽象類這一概念。接口和抽象類使您可以創建組件交互的定義。通過接口,可以指定組件必須實現的方法,但不實際指定如何實現方法。抽象類使您可以創建行為的定義,同時提供用於繼承類的一些公共實現。對於在組件中實現多態行為,接口和抽象類都是很有用的工具。
一個抽象類必須為類的基本類列表中列出的接口的所有成員提供實現程序。但是,一個抽象類被允許把接口方法映射到抽象方法中。例如
interface IMethods { void F(); void G(); } abstract class C: IMethods { public abstract void F(); public abstract void G(); }
這裡, IMethods 的實現函數把F和G映射到抽象方法中,它們必須在從C派生的非抽象類中被覆蓋。
注意顯式接口成員實現函數不能是抽象的,但是顯式接口成員實現函數當然可以調用抽象方法。例如
interface IMethods { void F(); void G(); } abstract class C: IMethods { void IMethods.F() { FF(); } void IMethods.G() { GG(); } protected abstract void FF(); protected abstract void GG(); }
這裡,從C派生的非抽象類要覆蓋FF 和 GG, 因此提供了IMethods的實際實現程序。