2011-01-15 10 views
6

対プライベート静的:どちらが良いですか?このサンプルコードでプライベート

public class SuperMan { 
    private static bool IsProper(decimal x) { 
     return x > 31.0m && x < 45.0m; 
    } 

    public bool CheckStuff(string a, string b, string c) { 
     // lots of code, some of which introduces a variable x 
     return IsProper(x) && /* other conditions */; 
    } 
} 

万一IsProper(..)は、「プライベート静的」または「プライベート」です。仮定すると:

  1. IsProper(..)は、任意のインスタンスの状態にアクセスする必要はありません
  2. 我々は2つのオプションの異なるパフォーマンスを懸念していない(私たちは決してすべきものの一つ(でも、将来的に。)実測せずにパフォーマンスについて推測しなくても最適化されません。)スーパーマンのクラスもそのメンバーと何もする必要がありしていないようですので、
+3

は 'IsProper'の将来のバージョンでは、インスタンスの状態にアクセスする可能性がありますになるだろうか? – CodesInChaos

+0

いいえ...私はそれを明確にするために質問を編集します。 – kidoman

答えて

4

それは、静的である可能性があります。しかし、その関数がそのクラスに属しているかどうかは、自分自身に尋ねるべきです。

スーパーマンの10進数が適切な小数であるかどうか確認する場合は、です。しかし、私はそれを静的にしないでしょう。その定数値をSuperManプロパティで置き換える必要がある可能性があります。

+1

それはプライベートなので、ヘルパーだと推測できるだけです。同じコードが他の場所で使用されている場合は、ベースクラスまたはヘルパークラスに属します。 – leppie

+0

ヘルパー機能です。 – kidoman

+1

マイクロソフトが提供するコード分析ツールは、これを望ましくないものとしてフラグを立てます。メソッドがインスタンスフィールドを使用しない場合、メソッドは静的でなければなりません。私はあなたが必要になったときにそれをインスタンス化する際にどのような難点があるか理解していません。 – Timwi

0

静的メソッドは少し速くすることができますが、一方で時々リファクタリングするのが難しくなることがあります。

+0

どのようにそうですか?私たちに例を挙げてください。 – kidoman

+0

@ KiD0M4N、Rafは正解ですが、静的な作成は不要ですが、不変のオブジェクトやステートレスな条件の静的メソッドを使用して不要な結果を防ぐ必要があるため、静的な方が高速です。 –

+0

メソッドを呼び出すためだけにオブジェクトを作成する必要がある場合は、それは当てはまりますが、インスタンスをすでに取得している場合は、パフォーマンスの違いは無視できます。それは存在しますが、それを心配する必要はありません。トップの4Dレンダリングエンジンを作成していない限り、心配する必要はありません。 – GolezTrol

2

理由は、インスタンスメンバーをIsProper作るために:

継承されたクラス内の別の実装を必要とIsProper
  • IsProper静的をIsProper作るために、将来的に

理由をメンバーにアクセスする必要がありますメンバー:

  • iを作成するとパフォーマンスが低下しますインスタンスメンバー。
  • だけIsProperを呼び出すクラスのインスタンスを作成する必要がある場合、あなたはそれが静的
関連する問題