佐々木屋

技術的なことから趣味まで色々書きます

定数表現はconst?readonly?

シンボリック定数などの定数を宣言する場合、二通りの方法があります。

  • static readonly(VB.NETはReadOnly)
  • const

どちらも定数表現としてよく使われますが、明確な違いは以下の通りです。

項目 static readonly
(ReadOnly)
const
宣言 クラスメンバーのみ どこでもOK
速度 やや遅い 速い
switch(Select Case) ×
書き換え コンストラクタ内であれば書き換え可能 宣言時のみ初期化可能
(初期値を入れないとコンパイルエラーになる)
静的か動的か staticが無くても可 強制的にstaticとなる
コンパイル 変数と同等扱い 値が埋め込まれる
インスタンス ×


どっちを使えば?の話ですが、正直どちらでもやりたいことは実現可能ですが、私は基本的には以下のように分けています。

  • 基本はstatic readonlyを使用する
  • 長期的に不変な情報で、且つ変更される予定が無い 場合にのみconstを使用する