虚方法和继承设计

时间:2013-08-31 14:30:53

标签: c# oop inheritance virtual object-oriented-analysis

考虑我们使用虚拟方法base class A的抽象foo1()调用其他虚拟方法foo2()。(foo1和foo2在基类级别实现,但也是虚拟的)

我还class B这是继承自class A的具体类 现在,Class A已继承foo1()(当然还有foo2(),但如果我想对foo1()执行相同操作,但这一次只需调用foo3() foo2()的{​​{1}},我该怎么做?这样做的最佳做法/设计是什么?

我看到一些选项,猜猜有更好的选择

  1. 覆盖class B中的foo1()并编写与base.foo1()中相同的代码,但将foo2()的调用更改为foo3() - >这是一些代码重复的原因,因为除了呼叫foo2()foo3()之外,所有代码都相似。

  2. 在具体课程B中覆盖foo2() 这是否意味着现在继承的foo1()会在午餐foo2()覆盖class B的版本,或者它仍然会执行相同级别的class A

  3. 这是选项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();
    }
    

    由于

1 个答案:

答案 0 :(得分:0)

选项2是要走的路。在B类中覆盖foo2,每当调用A类中的foo1时,它将在B类中调用foo2。