2013年12月20日金曜日

C# 定数

C#をやっていると、たまにメンバの定数ってどう宣言すんだっけ? となる。ぼけか?
とにかく、もうそんなことにならないためにメモ。

参考サイト
定数(C# によるプログラミング入門) - ++C++

メンバの定数を定義するためには、constとreadonlyの2つの方法がある。

/*---------------------------------------------------------------------------*/
private const int PI = 3.14;
private static readonly int PI = 3.14;
/*---------------------------------------------------------------------------*/

2つの違いは以下の通り。参考サイトからまるっとコピー!

constreadonly
ローカル変数にも使えるクラスのメンバー変数のみ。
常に静的変数と同じ扱い。static の有無を変えられる。
宣言時にのみ初期化可能。コンストラクタ内で値を書き換え可能。
コンパイル結果はリテラルと同等。コンパイル結果は変数と同等。
インスタンスを new で生成するようなものには使えない。new 可能。

ああ、bloggerのコピペするとhtml構文もコピーする機能ってこのためなのか。いまさら知った。

constは扱いがリテラル(直接記述したデータ。コンパイル時に値が展開される)なので、
バージョニング問題というものが発生するらしい。
constなデータを外部で参照している場合、コンパイル時に参照側も再コンパイルしないと、
値が変化しない現象。
privateなメンバ、ソースコード内からしか参照されない値なら問題ない。



まとめとして、privateな定数ならconst、publicな定数ならreadonlyを使用するのが無難っぽい。

0 件のコメント:

コメントを投稿