很抱歉,这个问题听起来很混乱。我的意思是,如果我有一个类有一个方法进行一堆计算然后返回一个值,我可以将该方法公开(这使我的其他类访问),或者我可以使它私有和make公共获取方法。
这样的事情:
public publicmethod{
return privatemethod();
}
private privatemethod{
//do stuff
return value;
}
这是徒劳的,还是提供额外的程序安全性?
答案 0 :(得分:4)
嗯,这里没有额外的安全措施。但是,这种用法有时是有道理的。
例如,private和public方法可能有不同的语义。
// base class
public virtual BuyFood()
{
BuyPizza();
BuyCoke();
}
private void BuyPizza()
{
// ...
}
// derived class
public override void BuyFood()
{
BuyChopSuey();
}
private void BuyChopSuey()
{
// ...
}
因此,您的实现只是调用私有方法 - 但重要的是,您公开了语义:您的BuyFood
操作只是BuyChopSuey()
。你的代码说:“在这个课堂上,以明确的方式购买食物只是买杂碎”。您可以随时将BuyTsingtaoBeer()
添加到BuyFood()
,而无需更改这两种方法的语义。
答案 1 :(得分:3)
这完全是多余的。除了另一个名称之外,它没有提供任何相同的东西和读者可以遵循的另一个间接。只需进行一次实施,并将其公之于众。同样,getX() { return x; } setX(T newX) { x = newX; }
没有封装任何东西,充其量是未来的证据。
您最终可能会在一行中实现接口所需的特定功能,主要是委托给(可能是私有的)方法,这些方法由于其他正当理由而存在。这是不同的,更合理(但同样,如果它只是 return someMethod();
,你应该废除私有实现并假设通用名称)。一个特殊的情况,如果你需要两个实现两个方法做同样的事情(例如从不同的接口)。
答案 2 :(得分:1)
我认为无论哪种方式都很好,假设方法不改变类的状态,更多的是风格问题。如果你有一个具有大量属性和很少方法的类,那么定义另一个属性可能更有意义。如果类中有很多方法但属性很少,那么方法与整体类设计更加一致。
如果该方法更改了一堆其他类变量,而不是将其作为公共方法而不是属性公开。
我认为无论是方式,财产还是方法,都不一定更安全。这取决于你做什么检查 - 是否允许调用者执行计算?计算中使用的所有变量都在可接受的范围内吗?等等。无论您使用的是属性还是方法,都可以执行所有这些检查。
答案 3 :(得分:0)
嗯,实际问题是What code do I want to be able to call this method?
public
。internal
。private
。将私有方法直接别名为public方法只会使私有方法可以从外部调用,这与其private
状态相矛盾。
答案 4 :(得分:0)
如果方法只进行一些计算并且不使用或更改对象中的任何内容,请将其设为公共静态方法:
public static CalculationMethod(int input) {
//do stuff
return value;
}
这样任何代码都可以使用该方法而无需创建类的实例:
int result = ClassName.CalculationMethod(42);
而不是public
考虑internal
,它只能访问同一个程序集中的代码。