考虑我们使用虚拟方法base class A
的抽象foo1()
调用其他虚拟方法foo2()
。(foo1和foo2在基类级别实现,但也是虚拟的)
我还class B
这是继承自class A
的具体类
现在,Class A
已继承foo1()
(当然还有foo2()
,但如果我想对foo1()
执行相同操作,但这一次只需调用foo3()
foo2()
的{{1}},我该怎么做?这样做的最佳做法/设计是什么?
我看到一些选项,猜猜有更好的选择
覆盖class B
中的foo1()并编写与base.foo1()
中相同的代码,但将foo2()
的调用更改为foo3()
- >这是一些代码重复的原因,因为除了呼叫foo2()
或foo3()
之外,所有代码都相似。
在具体课程B中覆盖foo2()
这是否意味着现在继承的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 :(得分:0)
选项2是要走的路。在B类中覆盖foo2,每当调用A类中的foo1时,它将在B类中调用foo2。