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