値を変えたくないときに使う「readonly / const(定数)」とは?
C#では、一度設定したら変更したくない値を扱うときに、const(定数) または readonly(読み取り専用) を使います。
どちらも「変更できない値」ですが、使えるタイミングや目的に違いがあります。
const(定数)の特徴
- コンパイル時に決まる定数
- 必ず初期化が必要(後から代入不可)
- 暗黙的にstatic(クラス全体で共有)
public class Circle {
public const double Pi = 3.14159;
public double GetArea(double radius) {
return Pi * radius * radius;
}
}
const
は コンパイル時に固定されるので、プログラム内で変更できません。
readonly(読み取り専用)の特徴
- 実行時に初期化が可能(コンストラクタで設定できる)
- 初期化後は変更不可
- インスタンスごとに異なる値も可能
public class Person {
public readonly string Id;
public Person(string id) {
this.Id = id; // コンストラクタ内で初期化OK
}
}
readonly
は実行時の初期化に柔軟で、インスタンスごとの固有値にも使えます。
constとreadonlyの違い
項目 |
const |
readonly |
初期化のタイミング |
コンパイル時 |
実行時(コンストラクタ可) |
再代入 |
不可 |
不可(初回のみ可) |
staticの有無 |
暗黙的にstatic |
任意(staticで使うことも可能) |
用途 |
共通の定数(π、重力など) |
インスタンス固有の読み取り専用値(IDなど) |
static readonlyの併用例
public static class Config {
public static readonly string Version = "1.0.0";
}
static readonly
を使えば、変更不可かつクラス全体で共有できる読み取り専用の値を作れます。
まとめ
const はコンパイル時に固定される定数、readonly は実行時に1度だけ初期化できる読み取り専用変数です。
どちらも「変更できない値」を扱いますが、タイミング・目的・柔軟性に応じて使い分けましょう!