0

質問が紛らわしいと思われる場合は申し訳ありません。つまり、一連の計算を実行してから値を返すメソッドを持つクラスがある場合、そのメソッドをパブリックにする(他のクラスにアクセスを許可する)か、プライベートにして作成することができます。パブリックgetメソッド。

このようなもの:

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

これは無駄な演習ですか、それとも追加のプログラムセキュリティを提供しますか?

4

5 に答える 5

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()、いつでも追加できます。

于 2012-08-31T17:36:44.317 に答える
3

それは完全に冗長です。同じものの別の名前と、読者が従うべき別の間接参照以外は何も提供しません。単一の実装を作成し、それを公開するだけです。同じように、getX() { return x; } setX(T newX) { x = newX; }何もカプセル化せず、せいぜい将来にわたって利用できます。

インターフェイスに必要な特定の機能を1行で実装し、他の正当な理由で存在する(場合によってはプライベートな)メソッドに主に委任することになります。これは異なり、より正当化されます(ただし、それが唯一 return someMethod();の場合は、おそらくプライベート実装を廃止し、共通名を想定する必要があります)。2つ必要な場合、同じことを行う2つのメソッドを実装する場合の特定のケース(たとえば、別々のインターフェースから)。

于 2012-08-31T17:32:34.123 に答える
1

どちらの方法でも問題ないと思います。メソッドがクラスの状態を変更しないと仮定すると、スタイルの問題になります。多数のプロパティがあり、メソッドが非常に少ないクラスがある場合は、別のプロパティを定義する方がおそらく理にかなっています。クラスに多くのメソッドがあり、プロパティが少ない場合、メソッドはクラス全体の設計とより一貫性があります。

メソッドが他のクラス変数の束を変更した場合、プロパティではなくパブリックメソッドとして公開します。

プロパティとメソッドのどちらの方法も、必ずしもより安全だとは思いません。それはあなたが行うチェックに依存します-発信者は計算を実行することを許可されていますか?すべての変数が許容範囲内で計算に使用されていますか?などこれらのチェックはすべて、プロパティまたはメソッドのどちらを使用しているかに関係なく実行できます。

于 2012-08-31T17:32:07.923 に答える
0

さて、実際の質問はWhat code do I want to be able to call this method?

  • 他のアセンブリからのものであっても、一般的なコードはありますか?メソッドを作成しpublicます。
  • 同じアセンブリからのコードはありますか?それを作りなさいinternal
  • このクラスのコードのみ?それを作りなさいprivate

プライベートメソッドをパブリックメソッドに直接エイリアスすると、プライベートメソッドは外部からのみ呼び出せるようになり、そのprivateステータスと矛盾します。

于 2012-08-31T17:35:05.150 に答える
0

メソッドが一部の計算のみを行い、オブジェクト内で何も使用または変更しない場合は、パブリック静的メソッドにします。

public static CalculationMethod(int input) {
  //do stuff
  return value;
}

このようにして、クラスのインスタンスを作成しなくても、どのコードでもメソッドを使用できます。

int result = ClassName.CalculationMethod(42);

publicを考慮する代わりにinternal、同じアセンブリ内のコードにのみアクセスできるようにします。

于 2012-08-31T17:36:33.213 に答える