C#でconstとreadonlyの違いを理解しよう!定数の管理方法を解説
生徒
「C#で値が変わらない定数って、どうやって使うんですか?」
先生
「C#ではconst
とreadonly
という2つの方法で定数を扱えます。」
生徒
「それってどう違うんですか?同じ“変わらない値”なのでは?」
先生
「それでは、const
とreadonly
の違いについて、わかりやすく説明していきましょう!」
1. constとは?
const
(コンスト)は、「コンスタント(constant)」の略で、プログラムが始まる前から決まっていて絶対に変わらない値を表すキーワードです。たとえば、「円周率」や「1日の時間(24時間)」など、一生変わらない値に使います。
const
を使うと、その値はコンパイル時に固定され、プログラムの中で変更することができません。
書き方は以下のようになります:
const double Pi = 3.14;
Console.WriteLine("円周率は " + Pi);
円周率は 3.14
上記の例では、Pi
は円周率で、絶対に変わらない値なのでconst
を使っています。
2. readonlyとは?
readonly
(リードオンリー)は、「読み取り専用」という意味です。プログラムの実行中に一度だけ設定できて、その後は変更できない値を表します。
readonly
は、主にクラスのメンバー変数(フィールド)に使います。const
と違い、実行時(ランタイム)に値を決められるので、より柔軟です。
以下のように使います:
class Circle
{
public readonly double Radius;
public Circle(double radius)
{
Radius = radius; // コンストラクタ内で初期化
}
public void ShowRadius()
{
Console.WriteLine("半径は " + Radius);
}
}
半径は 10
上記の例では、Radius
はオブジェクトが作られるときに一度だけ設定され、その後は変更できません。
3. constとreadonlyの違いを比較しよう
const
とreadonly
はどちらも「一度決めたら変えられない値」ですが、以下のような違いがあります:
特徴 | const | readonly |
---|---|---|
値の設定タイミング | コンパイル時(ソースコードに書いた時点) | 実行時(コンストラクタ内など) |
使える場所 | メソッド内、クラス内 | クラス内(フィールドとして) |
初期化方法 | 定義時にすぐ必要 | 定義時またはコンストラクタで可能 |
変更可能か | 不可能 | 一度だけ初期化可能 |
動的な値 | 使用できない | 使用できる |
たとえば、日時や設定ファイルから読み込んだ値など、実行してみないと分からない値にはreadonly
が適しています。
4. どちらを使えばいい?初心者向けの判断ポイント
定数を使うとき、以下のように選ぶとわかりやすいです:
- 「絶対に変わらない値」 →
const
(例:円周率、消費税率など) - 「初期化だけしたら変えたくない値」 →
readonly
(例:ユーザーID、開始日時など)
プログラミング未経験の方でも、「料理のレシピ」に例えるとイメージしやすいです。
constは「レシピに書かれていて絶対変わらない分量(例:卵は2個)」、readonlyは「そのときに決めたけど途中で変えない分量(例:冷蔵庫にあるぶんの牛乳)」のようなものです。
5. 実際に使い分けるコード例
以下は、const
とreadonly
を両方使った例です。
class Config
{
public const string AppName = "MyApp"; // いつも同じ
public readonly string UserName; // 実行時に決まる
public Config(string userName)
{
UserName = userName;
}
public void Show()
{
Console.WriteLine("アプリ名:" + AppName);
Console.WriteLine("ユーザー名:" + UserName);
}
}
class Program
{
static void Main()
{
Config config = new Config("たろう");
config.Show();
}
}
アプリ名:MyApp
ユーザー名:たろう
このように、固定の情報はconst
、実行時に一度だけ決まる情報はreadonly
を使いましょう。