2013-08-31 38 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。