●学校情報

講座一覧・募集状況

学習方法

学習サポート

修了生の評価

受講生の横顔

当学院について

入学相談

入学手続

 

●講座情報

技術者養成講座

プログラミング講座

WEB講座

情報処理試験講座

Excel講座

Access講座

 

●関連コラム

関連コラム

関連用語集

 

logo

 

 

関連用語集

値を変えたくないときに使う「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度だけ初期化できる読み取り専用変数です。
どちらも「変更できない値」を扱いますが、タイミング・目的・柔軟性に応じて使い分けましょう!

 

C#関連用語集

−−−−−  C#  −−−−−

C#の基本単位「クラス(Class)」とは?

クラスから生まれる実体「オブジェクト(Object)」とは?

クラスの実体「インスタンス(Instance)」とは?

オブジェクトの初期化に使う「コンストラクタ(Constructor)」とは?

フィールドへのアクセスを制御!「プロパティ(Property)」とは?

クラスが持つデータ「フィールド(Field)」とは?

クラスの動作を定義する「メソッド(Method)」とは?

既存のクラスを引き継ぐ「継承(Inheritance)」とは?

同じ命令で異なる動きができる「多態性(Polymorphism)」とは?

データを守る「カプセル化(Encapsulation)」とは?

土台だけを用意する「抽象クラス(Abstract Class)」とは?

ルールを定める仕組み「インターフェース(Interface)」とは?

親クラスのメソッドを上書きする「オーバーライド(Override)」とは?

引数の違いで同じ名前が使える「オーバーロード(Overload)」とは?

C#で自分自身を指す「thisキーワード」とは?

親クラスの機能を使う「baseキーワード」とは?

インスタンス不要で使える「static(静的)」とは?

値を変えたくないときに使う「readonly / const(定数)」とは?

メソッドを渡せる仕組み「delegate(デリゲート)」とは?

「何かが起きたら知らせる」仕組み「event(イベント)」とは?

簡潔な書き方ができる「ラムダ式(Lambda Expression)」とは?

C#で使える「LINQ(言語統合クエリ)」とは?

エラーから安全に回復する「例外処理(try-catch-finally)」とは?

意図的にエラーを発生させる「throw(スロー)」とは?

名前空間やリソースを扱う「usingディレクティブ」とは?

クラスの整理に便利な「namespace(名前空間)」とは?

型を柔軟に扱う「ジェネリクス(Generics)」とは?

データの集まりを扱う「コレクション(List / Dictionary / HashSet)」とは?

処理を止めずに進める「非同期処理(async / await)」とは?

簡単に使えて便利!「自動実装プロパティ」と「プロパティ初期化子」