是否有必要为类中的私有方法制作面向公众的方法?

时间:2012-08-31 17:26:22

标签: c#

很抱歉,这个问题听起来很混乱。我的意思是,如果我有一个类有一个方法进行一堆计算然后返回一个值,我可以将该方法公开(这使我的其他类访问),或者我可以使它私有和make公共获取方法。

这样的事情:

public publicmethod{
    return privatemethod();
}
private privatemethod{
    //do stuff
    return value;
}

这是徒劳的,还是提供额外的程序安全性?

5 个答案:

答案 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,它只能访问同一个程序集中的代码。

相关问题