2009-05-26 27 views

答えて

20

後者が優れている - それは意味:あなたはあなたが勝った

  • を作成するすべてのインスタンス内の冗長な文字列参照で終わるしないように

    • これは、インスタンス変数は、ではありません変数を変更することはできません(おそらく望みません)

    "const"は他のアセンブリやバージョン管理からのアクセスに関していくつかの効果がありますが、それは問題ではありません。あなたはされていると、それのほとんど考えることができます:私は、それがインスタンスによって変化しない場合は(、なぜそれがインスタンス変数でなければなりませんができたときに、静的フィールドを作成することをお勧めします。一般に

    static readonly string sQuery = ...; 
    

    を信じます?)と読み取り専用の場合(変更可能なデータは推論するのが難しい)。 static readonlyconstの違いの詳細に私が入りたいのであれば教えてください。

  • +0

    これらの違いを説明してください。 (ありがとうございました) – uzay95

    +0

    そして関数でconst/readonlyとは何と思いますか? – uzay95

    +0

    http://stackoverflow.com/questions/410723/is-there-a-difference-between-private-const-and-private-readonly-variables-in-c若干の光を当てる可能性があります –

    1

    ReSharperは、特定の文字列リファレンスが変更されない場合にのみこれを示唆しています。その場合は、stringの代わりにconst stringを使用して、あなたの意図を表現します。

    1

    これは、コード内でsQueryに新しい値を誤って割り当てた場合、constの場合はコンパイルエラーが発生するため、コンパイル時にバグが発生するためです。 ctorでのみ読み込み専用に設定されているメンバ変数を作成する提案と同じ

    3

    文字列が変更されず、アセンブリの外部で使用されない場合、constは良い考えです。変更されない場合はであることがアセンブリの外部で使用されている場合、静的な読み取り専用が良い考えです。constは、呼び出し場所で「焼き付け」され、1つの場所に格納されないため、constを含むアセンブリを再コンパイルします。依存するアセンブリを更新しない - 再コンパイルする必要があります。一方、静的な読み取り専用変数は、依存するアセンブリで更新されます。

    +0

    "アセンブリの外に静的な読み取り専用が良いアイデアかもしれません" なぜですか?
    "static sQuery"または "static readonly sQuery"を変更したい場合でも、何も変更されません。 ? 。 – uzay95

    +0

    Readonlyでは、再割り当てを行わず、静的変数は変数(constとは異なります)です。したがって、定義されているアセンブリ内の文字列を変更すると、更新は依存アセンブリに反映されます。これは、依存するアセンブリを再コンパイルしない限り、constを変更したときには発生しません。 – Rytmis

    +1

    フィールドの代わりにローカル変数の場合、これは適用されません。 :) – Rytmis

    関連する問題