2013-08-31 72 views
0

考慮我們有抽象base class A虛擬方法foo1()正在調用一些其他的虛擬方法foo2()(foo1和foo2的基類級別上實現,而且虛擬的)虛擬方法和inhertitance設計

我也已經class B這是從class A繼承的具體類。
現在,Class A繼承了foo1()(當然foo2()的,但如果我想要做的foo1()相同的操作,但這次通過調用foo3()而不是foo2(),我怎麼能做到這一點,什麼是最好的實踐/設計做所以

我看到一些選項,在class B想有更好的

  1. 覆蓋foo1()和寫相同的代碼爲base.foo1()但更改電話foo2()foo3()? - >這是一些WH在代碼複製時,因爲除了調用foo2()foo3()以外,所有代碼都是相似的。

  2. 重寫foo2()在具體的類B.
    的是,現在繼承foo1()將在午餐foo2()class B重寫版本,否則將仍然需要實現同級別class A的意思呢?

這是選項2的代碼示例:(更像是僞代碼)

public abstract Class A 
{ 
    public virtual void foo1() 
    { 
     doing some actions123 
     foo2(); 
     doing some actions4 
    } 

    public virtual void foo2() 
    { 
     Console.writeln("Class A foo2"); 
    } 
} 

public Class B : A 
{ 
    public override void foo2() 
    { 
     foo3(); 
    } 

    public void foo3() 
    { 
     Console.writeln("Class B foo3"); 
    } 
} 

public static void main() 
{ 
    B bClass = new B(); 
    B.foo1(); 
} 

感謝

+0

總是調用大多數重寫的實現。所以選項2將起作用。 –

回答

0

選項2是要走的路。覆蓋類B中的foo2,並且只要類A中的foo1被調用,它就會調用類B中的foo2。