定数クラスを作成するためのベストプラクティスを提案する


25

定数クラスの宣言については、私のチームメンバーの間で議論があります。定数変数を以下のような別のクラスに移動しています。

public class Constants
{
      public const string StateId = "ST";
      public const string CountryId = "CI";
}

私のチームメンバーの何人かは、オーバーライドオプションを回避するためにクラスを封印済みとして宣言することを提案しました。また、定数クラスのインスタンス作成を回避するために静的としてマークすることを提案する人もいます。
ただし、将来の必要に応じて読み取り専用変数を初期化するのに役立つため、静的コンストラクターでSealedとして使用することを好みます。これに関するアドバイスをお願いします。


どちらにしても、オブジェクトと「グローバル」型クラス間の依存関係を回避するために、定数クラス自体ではなくシステム内のインターフェースを使用することを検討することが考えられます。
dreza 14

クラスを静的にし、静的コンストラクタを今すぐ追加するか、後で追加するかを尋ねるのに同意しますか?あなたの質問に反対意見はありません。明確にしてください。
ドックブラウン14


2
質問がありません。クラスにインスタンスメンバーがない場合は、マークできますstatic。これは、静的コンストラクターの有無に完全に直交しています。
CodesInChaos 14

1
定数は実際には数学的な意味で定数ですか、それともこれは構成の形式ですか?
CodesInChaos 14

回答:


31

あなたの質問が何であるかは完全には明らかではありませんが、値が本当に一定であれば、次の単純なオプションに問題は見られません。

    public static class LocationConstants
    {
        public const string StateId = "ST";
        public const string CountryId = "CI";
    }

staticクラス宣言で使用すると、このクラスの目的に対する意図が示されます。

Marc Gravellは、このStack Overflowの回答で、定数に関する潜在的な問題について説明しています。これらがコードベースの問題であるかどうかを知るのはあなただけですが、値変更される可能性がある場合は、のpublic static readonly代わりに使用してconstください。そうでない場合、値が変更されると定数を参照するコードを再構築する必要があります。


1
const変数を使用して見つけることができる警告の1つは、ここで明確に説明されています。コードベースは成長し、より複雑になる傾向があるため、を使用することは避けたほうがよいでしょう。constパフォーマンスの向上は、通常、将来の潜在的なトラブルのリスクに見合う価値はありません。public static readonly定数には変数を使用することを好みます。
ジョアンロフェ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.