我有一个叫做Ship的类和一个叫做的类Lifeboat
救生艇继承自船舶.
Ship包含一个Validate()在save之前调用的方法,它有一个FurtherValidate()从Validate调用的抽象方法.这样做的原因是当你在基础上调用validate时它也验证了继承的类.所以我们有
public class Ship
public bool Validate()
{
//validate properties only found on a ship
FurtherValidate();
}
public abstract bool FurtherValidate();
Run Code Online (Sandbox Code Playgroud)
因此,Lifeboat有
public override bool FurtherValidate()
{
//validate properties only found on a lifeboat
}
Run Code Online (Sandbox Code Playgroud)
这意味着任何实现Ship也需要为他们的类提供他们自己的验证,并且保证在save作为基础船被调用.Validate()被调用,它反过来调用继承的验证.
我们如何才能重新开始工作,这样我们仍然可以强制继承类来实现,FurtherValidate()但FurtherValidate()程序员永远不能调用它们.目前你可以打电话Lifeboat.FurtherValidate(),我想以某种方式阻止这一点.
protected abstract bool FurtherValidate();
Run Code Online (Sandbox Code Playgroud)
只有船和救生艇现在可以看到它.
编辑:救生艇必须能够看到它.FurtherValidate当它甚至看不到它时,它应该如何能够覆盖.我会重命名它ValidateCore,'核心'部分(对我而言)意味着不应该在没有充分理由的情况下调用它.
我认为将其抽象但不可见是不容易的.你需要对你的救生艇有一些信心;)
简短的回答是,您无法从派生它的类隐藏派生方法.但是,您可以重构代码以完成您要实现的目标:
public class Ship
{
public virtual bool Validate()
{
//validate properties only found on a ship
return true;
}
}
public class Lifeboat : Ship
{
public override bool Validate()
{
base.Validate();
// lifeboat specific code
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
719 次 |
| 最近记录: |