とにかく、もうそんなことにならないためにメモ。
参考サイト
・定数(C# によるプログラミング入門) - ++C++
メンバの定数を定義するためには、constとreadonlyの2つの方法がある。
/*---------------------------------------------------------------------------*/
private const int PI = 3.14;
private static readonly int PI = 3.14;
/*---------------------------------------------------------------------------*/
2つの違いは以下の通り。参考サイトからまるっとコピー!
const | readonly |
---|---|
ローカル変数にも使える | クラスのメンバー変数のみ。 |
常に静的変数と同じ扱い。 | static の有無を変えられる。 |
宣言時にのみ初期化可能。 | コンストラクタ内で値を書き換え可能。 |
コンパイル結果はリテラルと同等。 | コンパイル結果は変数と同等。 |
インスタンスを new で生成するようなものには使えない。 | new 可能。 |
ああ、bloggerのコピペするとhtml構文もコピーする機能ってこのためなのか。いまさら知った。
constは扱いがリテラル(直接記述したデータ。コンパイル時に値が展開される)なので、
バージョニング問題というものが発生するらしい。
constなデータを外部で参照している場合、コンパイル時に参照側も再コンパイルしないと、
値が変化しない現象。
privateなメンバ、ソースコード内からしか参照されない値なら問題ない。
privateなメンバ、ソースコード内からしか参照されない値なら問題ない。
まとめとして、privateな定数ならconst、publicな定数ならreadonlyを使用するのが無難っぽい。
0 件のコメント:
コメントを投稿