web-dev-qa-db-ja.com

C#のプライベート静的メソッドは何かを傷つけますか?

クラスで複数回発生する特定の検証用のプライベート検証メソッドを作成しました(検証されたデータをさまざまな理由で保存できません)。現在、ReSharperは、関数を静的にできることを示唆しています。静的メソッドの既知の問題のため、そうすることに少し消極的です。 private静的メソッドになります。私の質問は、プライベート静的メソッドがパブリック静的メソッドのような同様の結合とテストの問題を引き起こす可能性があるのですか?それは悪い習慣ですか?私はそうは思いませんが、ここに落とし穴があるかどうかはわかりません。

10
Tamás Szelei

「これをテストする必要がありますか?」

メソッドがプライベートである場合、つまりメソッド自体のロジックを単体テストしたくない場合、テスト容易性と保守容易性に関する限り、クラスはどちらかの方法でブラックボックスであり、クラスの内部動作はそのビジネスです。そしてそれだけ。リファクタリングも影響を受けません。これも考慮する必要があります。

だから、私の意見では、いいえ。「プライベート」メソッドを「プライベートスタティック」にしても、長期的な影響はまったくありません。

16
Ed James

プライベート静的メソッドは、私の観点からは、可能な最も簡単なものです。

DataIn->メソッド-> DataOut

外部オブジェクトへの依存関係はなく、副作用もありません。なぜあなたはそれらを悪いと思いますか?

17
Coder

se public static methodであるクラスのテストは、静的メソッドをスタブ化/偽造/モックアウトすることが(特に)簡単ではないため、難しい場合があります。一方、インスタンスメソッドは、特に仮想である場合やインターフェイスを満たす場合に、簡単にモック化できます。

ただし、プライベート静的メソッドを使用しない理由はわかりません。確かに、メモリを占有するためにクラスのインスタンスを必要としないため、パフォーマンスがわずかに向上します。

一方、anything staticはコードの匂いが少しします。これは実際には「ヘルパークラス」ですか?メソッドがパラメーターとして渡されたクラスの1つにもっと便利に常駐できるのでしょうか?これらの質問に対する回答は、多くの場合「静的なものとしては問題ありません」ですが、覚えておく価値はあります。

2
Jeremy McGee