虚拟方法和固有设计
本文关键字:方法 虚拟 | 更新日期: 2023-09-27 18:29:41
考虑我们有一个抽象的base class A
和一个调用其他虚拟方法foo2()
的虚拟方法foo1()
。(foo1和foo2在基类级别实现,但也是虚拟的)
我还有class B
,它是继承自class A
的具体类
现在,Class A
继承了foo1()
(当然还有foo2()
,但如果我想做与foo1()
相同的操作,但这次是调用foo3()
而不是foo2()
,我该怎么做?这样做的最佳实践/设计是什么?
我看到了一些选项,我想还有更好的
-
重写
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();
}
感谢
选择2是可行的。覆盖类B中的foo2,每当调用类A中的foo1时,它都会调用类B的foo2。