私のプログラムで使用するさまざまな定数があります... string
、int
、double
など。これらを保存する最良の方法は何ですか?データがすべて同じ型ではなく、各値を手動で設定したいので、Enum
が必要だとは思わない。すべてを空のクラスに保存するだけですか?または、より良い方法がありますか?
おそらく、静的な読み取り専用プロパティを使用して、静的クラスにそれらを含めることができます。
public static class Routes
{
public static string SignUp => "signup";
}
定数でいっぱいのクラスを使用するIMOは、定数に適しています。時々変更される場合は、代わりにconfigおよびConfigurationManagerクラスでAppSettingsを使用することをお勧めします。
実際にAppSettingsなどからプルされる「定数」がある場合、構成マネージャーからの読み取り値をラップする「定数」クラスが常にあります。上記の設定値を使用したい場所でConstants.SomeModule.Setting
に直接頼る代わりに、ConfigurationManager.AppSettings["SomeModule/Setting"]
を使用する方が常に有意義です。
このセットアップのボーナスポイントは、SomeModule
がConstantsファイル内のネストされたクラスである可能性が高いため、依存性注入を使用して、それに依存するクラスにSomeModule
を直接注入できます。 SomeModule
の上にインターフェイスを抽出し、消費コードでISomeModuleConfiguration
に依存関係を作成することもできます。これにより、定数ファイルへの依存関係を分離でき、潜在的には特にこれらの設定がAppSettingsからのものであり、設定が環境固有であるため、構成変換を使用して変更する場合は、テストを簡単にします。
私がしたいことは次のことです(ただし、最後まで読んで適切なタイプの定数を使用してください):
internal static class ColumnKeys
{
internal const string Date = "Date";
internal const string Value = "Value";
...
}
これをお読みくださいconst
があなたの望むものではない理由を知るために。可能な定数のタイプは次のとおりです。
const
フィールド。値mightが将来変更される場合は、値がハードコーディングされるため、アセンブリ(public
またはprotected
)で使用しないでください。これらの他のアセンブリのコンパイル時に。値を変更すると、再コンパイルされるまで、古い値が他のアセンブリによって使用されます。static readonly
フィールドstatic
なしのset
プロパティこれがIMOの最良の方法です。プロパティは不要、または読み取り専用:
public static class Constants
{
public const string SomeConstant = "Some value";
}
空の静的クラスが適切です。 1つの巨大なGlobals.csファイルではなく、関連する定数の適切なグループになるように、いくつかのクラスの使用を検討してください。
さらに、一部のint定数については、表記法を考慮してください。
[Flags]
enum Foo
{
}
これにより、 フラグのような値を処理する が可能になります。
Web.configまたはapp.configを使用する別の投票。構成ファイルは、接続文字列などの定数に適した場所です。これらのタイプの項目を表示または変更するためにソースを見る必要はありません。これらの定数を.configファイルから読み取る静的クラスは、アプリケーションがこれらのリソースにコードで定義されているかのようにアクセスできるようにする一方で、簡単に表示/編集できる柔軟性を提供するため、適切な妥協案となる可能性がありますスペース。
はい、static class
は、特定の型に関連する定数を除き、定数を格納するのに十分です。
これらの定数がアプリケーションの動作に影響するサービス参照またはスイッチである場合、アプリケーションユーザー設定として設定します。そのように変更する必要がある場合は、再コンパイルする必要はなく、静的プロパティクラスを介してそれらを参照できます。
Properties.Settings.Default.ServiceRef
静的読み取り専用の静的クラスをお勧めします。以下のコードスニペットを見つけてください。
public static class CachedKeysManager
{
public static readonly string DistributorList = "distributorList";
}