0

いくつかの静的読み取り専用変数を格納するクラス Constants があります。

私はこれを行う必要があります:

private static readonly int _maxThings = 100;
...
public static int MaxThings { get { return _maxThings; } }

それは私には冗長に思えます。次のことだけをしない理由はありますか?

public static int MaxThings { get { return 100; } }

編集

さて、これは質問の脳のおならでした。要点は、初期化時にこの値を設定する場合は、静的なバッキング フィールドを使用して、それ自体を静的にする必要のないパブリックな取得専用プロパティを公開することが理にかなっているということです。

ただし、パブリック静的プロパティをハード値に設定することに抵抗がない場合は、それをアセンブリに焼き付けるだけで、機能的な違いはありません。ここで見逃している他の概念がない限り、この場合は const を使用します。

答えてくれてありがとう。

4

3 に答える 3

3

やったほうがいい

public const int MaxThings = 100;

この場合、プロパティを使用する理由はありません。

更新 ->

コメントへの対応..ライブラリを開発して定数をエクスポートしている場合は、.net で定数がどのように消費されるかを理解することが重要です。ライブラリに対してコンパイルすると、定数値はインライン化され、消費アプリケーションに含まれます。これにより、ライブラリが更新され、消費アプリケーションが更新されていない場合でも、古い定数値が引き続き存在します。もちろん、これは静的プロパティを使用する必要がある場合です。

ライブラリを開発していない場合は、const を使用しても問題ありません。

于 2010-07-28T00:58:56.840 に答える
1

定数はよく... 定数であるため、値は決して変化しません。

プロパティの優先事項は、フィールドとプロパティのシグネチャが異なることです。したがって、フィールドからプロパティに変更するには、すべての呼び出し元を再コンパイルする必要があります。したがって、最初のインスタンスでプロパティを作成すると、後で getter/setter ロジックを追加する必要がある場合に、その問題を回避できます。

決して変更されない定数があるため、それをプロパティとして実装する理由はまったくありません。を定義しましたreadonly staticが、これはクラス内からのみ変更できるため、外部的にはそれと定数の間に違いはありません。

于 2010-07-28T02:01:46.853 に答える
0

コードの可読性の観点からは、2 番目のコードが改善されていることがわかります。コンパイラがそのような状況で最適化するのに十分なほどスマートかどうかはわかりませんが、ヒットはごくわずかなので、読みやすさを優先します。

于 2010-07-28T00:57:04.847 に答える