当前位置:  开发笔记 > 编程语言 > 正文

如何隐藏方法,以便程序员不会调用它,但仍然可以在代码中使用?

如何解决《如何隐藏方法,以便程序员不会调用它,但仍然可以在代码中使用?》经验,为你挑选了2个好方法。

我有一个叫做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(),我想以某种方式阻止这一点.



1> alvin..:
protected abstract bool FurtherValidate();

只有船和救生艇现在可以看到它.

编辑:救生艇必须能够看到它.FurtherValidate当它甚至看不到它时,它应该如何能够覆盖.我会重命名它ValidateCore,'核心'部分(对我而言)意味着不应该在没有充分理由的情况下调用它.

我认为将其抽象但不可见是不容易的.你需要对你的救生艇有一些信心;)



2> Robert S...:

简短的回答是,您无法从派生它的类隐藏派生方法.但是,您可以重构代码以完成您要实现的目标:

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;
    }
}

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有