考虑以下两种方法:
class A{
void Method1(){
if(!something) return;
DoX();
DoY();
DoZ();
}
class B{
void Method2(){
if(!something) return;
DoX();
DoY();
DoP();
}
}
显然可以写一个超类来避免干原理:
class Super{
virtual void Method(){
if(!something) return; //problem...
DoX();
DoY();
}
}
class A:Super{
override void Method(){
inherited Method();
DoZ();
}
}
class B:Super{
override void Method(){
inherited Method();
DoP();
}
}
问题是!在第一个例子中检查它会用完的东西,而在第二个例子中,它将用完超类的方法,但在派生类中执行DoZ()或DoP(); < / p>
我的问题:解决此类问题的最佳方法是什么?来到我手中的那个让超类的方法成为一个返回bool的函数
virtual bool Method(){ if(!something) return false;}
override bool Method(){ if(!inherited Method()) return;}
这是最好的解决方法吗?
答案 0 :(得分:1)
怎么样:
class Super {
void Method() {
if (!something) return;
DoX();
DoY();
DoThingy();
}
abstract void DoThingy();
}
class A : Super {
override DoThingy() {
DoZ();
}
}
class B : Super {
override DoThingy() {
DoP();
}
}
答案 1 :(得分:0)
为什么不为DoP或Doz声明另一个虚拟方法,如果你想让它们以各自的名字公开,你可以将它们包装起来。
像超类一样:
virtual void wrapping(){};
然后每个孩子:
void wrapping() { DoP(); }
void wrapping() { DoZ(); }
不知道我是否已经清楚。
答案 2 :(得分:0)
另一种选择:将检查保留在派生方法中。也许派生类可能需要稍微不同的条件?
class Super{
virtual void Method(){
DoX();
DoY();
}
}
class A:Super{
override void Method(){
if(!something) return;
inherited Method();
DoZ();
}
}
class B:Super{
override void Method(){
if(!something) return;
inherited Method();
DoP();
}
}