我有一個具體的頂級FooBase和一個介面IFoo:
public class FooBase
{
//some code FooBase ?
}
public interface IFoo
{
void DoBar() ;
每一個子類FooChild都實作和擴展了這兩點:
public class FooChild : FooBase, IFoo
{
public void DoBar()
{
//some implementation {
}
}
具體的FooBase能否定義一個空方法的簽名,以便將實作委托給子類,就像IFoo介面那樣?
uj5u.com熱心網友回復:
有三種方式,基類可以允許或強迫它的繼承者實作所需的簽名:
1.
1. 虛擬方法(允許實作)
。public interface IFoo { void DoBar()。}
public class Foo : IFoo { public virtual void DoBar() { /*Default impl. */ }
public class FooChild 。Foo { public override void DoBar() { /* Child impl. */ }
2.抽象方法(強制實作)
public interface IFoo { void DoBar()。}
public abstract class FooBase : IFoo { public abstract void DoBar()。}
public class FooChild : FooBase { public override void DoBar() { /* Child impl. */ }
3.抽象分離的方法(強制實作,與介面沒有直接的邏輯聯系)
public interface IFoo
{
void DoBar() ;
}
public abstract class FooBase : IFoo
{
public void DoBar() { DoBarRelatedWork(); }
protected abstract void DoBarRelatedWork()。
}
public class FooChild : FooBase
{
public override void DoBarRelatedWork() { /* Child impl. */ }
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/310491.html
標籤:
