定数表現はconst?readonly?
シンボリック定数などの定数を宣言する場合、二通りの方法があります。
- static readonly(VB.NETはReadOnly)
- const
どちらも定数表現としてよく使われますが、明確な違いは以下の通りです。
項目 | static readonly (ReadOnly) |
const |
宣言 | クラスメンバーのみ | どこでもOK |
速度 | やや遅い | 速い |
switch(Select Case) | × | ○ |
書き換え | コンストラクタ内であれば書き換え可能 | 宣言時のみ初期化可能 (初期値を入れないとコンパイルエラーになる) |
静的か動的か | staticが無くても可 | 強制的にstaticとなる |
コンパイル | 変数と同等扱い | 値が埋め込まれる |
インスタンス | ○ | × |
どっちを使えば?の話ですが、正直どちらでもやりたいことは実現可能ですが、私は基本的には以下のように分けています。
- 基本はstatic readonlyを使用する
- 長期的に不変な情報で、且つ変更される予定が無い 場合にのみconstを使用する