Closed. This question is off-topic。它当前不接受答案。
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
6年前关闭。
考虑您有一个
类A覆盖方法
很少有其他类A1,A2,A3是
所有具体类均继承方法
方法
由于算法中存在一个if条件,因此“几乎”是一个例外,某些类可以说只有A1,A3需要在
对于A2,我们不需要启动
问题是如果我在类A中实现
我想将
有什么想法如何以适当的方式解决这个问题?
谢谢
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
6年前关闭。
考虑您有一个
abstract base class
A,它是从其他类X继承的。类A覆盖方法
foo1
。很少有其他类A1,A2,A3是
concrete
类。所有具体类均继承方法
foo1
。方法
foo1
几乎类似于应适用于所有具体类的通用算法。由于算法中存在一个if条件,因此“几乎”是一个例外,某些类可以说只有A1,A3需要在
foo2
的开头使用其他方法foo
。对于A2,我们不需要启动
foo2
。问题是如果我在类A中实现
foo2
,那么所有子元素也将继承此函数,这不是一个很好的设计吗?我想将
foo2
排除在将由具体类->实现的接口之外,但这并不好,因为调用foo1
的foo2
在基类上!有什么想法如何以适当的方式解决这个问题?
谢谢
最佳答案
在这种情况下,我将使用的解决方案是使抽象类的另一层成为需要特殊Foo2
的类的派生对象。
abstract class A : X
{
public virtual void Foo()
{
//Foo logic
}
}
abstract class B : A
{
protected virtual void Foo2()
{
//Foo2
}
override void Foo()
{
Foo2();
base.Foo();
}
}
public A1 : B
{
}
public A2 : A
{
}
public A3 : B
{
}
关于c# - 面向对象设计之谜,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17980906/
10-10 07:38