首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

接口的實現(五)

     編輯:關於C語言

15.4.4 接口實現的繼承機制

類繼承基類提供的所有接口實現。不顯式重實現則無法改變繼承的映射。範例:

interface IControl { void Paint(); }
class Control : IControl { public void Paint() { ... } }
class TextBox : Control { new public void Paint() { ... } }

TextBox.Paint 隱藏 Control.Paint,但不改變 Control.Paint → IControl.Paint 映射。調用結果:

Control c = new Control(); TextBox t = new TextBox();
IControl ic = c; IControl it = t;
c.Paint();  // Control.Paint
t.Paint();  // TextBox.Paint
ic.Paint(); // Control.Paint
it.Paint(); // Control.Paint  (非虛方法,接口調用仍走基類)

若接口方法映射到虛方法,派生類重寫虛方法可改變實現:

class Control : IControl { public virtual void Paint() { ... } }
class TextBox : Control { public override void Paint() { ... } }

此時 it.Paint() 調用 TextBox.Paint。

顯式接口成員不可聲明 virtual,無法直接重寫。最佳實踐:顯式實現調用另一 protected virtual 方法,派生類重寫該方法:

class Control : IControl {
    void IControl.Paint() { PaintControl(); }
    protected virtual void PaintControl() { ... }
}
class TextBox : Control {
    protected override void PaintControl() { ... }
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved