我有一个叫做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();
因此,Lifeboat
有
public override bool FurtherValidate() { //validate properties only found on a lifeboat }
这意味着任何实现Ship
也需要为他们的类提供他们自己的验证,并且保证在save作为基础船被调用.Validate()
被调用,它反过来调用继承的验证.
我们如何才能重新开始工作,这样我们仍然可以强制继承类来实现,FurtherValidate()
但FurtherValidate()
程序员永远不能调用它们.目前你可以打电话Lifeboat.FurtherValidate()
,我想以某种方式阻止这一点.
protected abstract bool FurtherValidate();
只有船和救生艇现在可以看到它.
编辑:救生艇必须能够看到它.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; } }