回答:
おそらく、静的な読み取り専用プロパティを持つ静的クラスにそれらを置くことができます。
public static class Routes
{
public static string SignUp => "signup";
}
定数でいっぱいのクラスを使用するIMOは、定数には問題ありません。それらが時々変更される場合は、代わりに設定でAppSettingsを使用し、ConfigurationManagerクラスを使用することをお勧めします。
実際にAppSettingsまたは類似のものからプルされた「定数」がある場合でも、構成マネージャーからの読み取りをラップする「定数」クラスは常にあります。上記の設定値を使用したい場所にConstants.SomeModule.Setting
直接頼る必要はなく、常により重要ConfigurationManager.AppSettings["SomeModule/Setting"]
です。
このセットアップのボーナスポイントはSomeModule
、定数ファイル内のネストされたクラスになる可能性が高いため、依存関係注入を使用して、依存SomeModule
するクラスに直接注入することも簡単にできます。また、インターフェイスを上に抽出して、使用するコードに依存関係をSomeModule
作成することもできISomeModuleConfiguration
ます。これにより、依存関係を定数ファイルに分離でき、特にこれらの設定がAppSettingsおよび設定は環境固有であるため、構成変換を使用して変更します。
私がやりたいことは次のとおりです(ただし、適切なタイプの定数を使用するには、最後まで読んでください)。
internal static class ColumnKeys
{
internal const string Date = "Date";
internal const string Value = "Value";
...
}
これを読んで、なぜconst
あなたが望むものではないのかを知ってください。可能な定数のタイプは次のとおりです。
const
田畑。他のアセンブリではコンパイル時に値がハードコードされるため、将来的に値が変更される可能性がある場合は、アセンブリ間で使用しないでください(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ファイルからこれらの定数を読み取る静的クラスは、コードで定義されているかのようにアプリケーションがこれらのリソースにアクセスできるようにする一方で、それらを簡単に表示/編集できるようにする柔軟性を提供するので、良い妥協かもしれません。スペース。