C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#でJavaのfinal変数を実現する方法:readonlyとsealedキーワードの使い方

Javaには変数やクラスを固定するためのfinalキーワードが用意されていますが、C#には同名のキーワードは存在しません。しかし、C#でも同等の機能を実現することは可能です。それにはsealedまたはreadonlyキーワードを使用します。

readonlyキーワードとは

readonly(読み取り専用)修飾子を付けた変数には、値を一度しか代入できません。つまり、readonlyとして宣言されたフィールドは、オブジェクトの構築時(コンストラクタ内)にのみ値を設定でき、その後は一切変更することができません。

この特性により、インスタンスごとに異なる値を持たせつつ、生成後は不変であることを保証したい場合にreadonlyが適しています。

コード例

class Employee {
    readonly int age;

    Employee(int age) {
        this.age = age; // コンストラクタ内でのみ代入可能
    }

    void ChangeAge() {
        // age = 27; // コンパイルエラーになる
    }
}

上記の例では、ageフィールドをreadonlyとして宣言しています。このフィールドはコンストラクタで一度値が代入された後は変更不可となり、ChangeAge()メソッド内のように再代入しようとするとコンパイルエラーが発生します。

readonlyとconstの違い

C#には似たような役割を持つconstキーワードもありますが、両者には以下のような違いがあります。

  • const:コンパイル時に値が確定し、宣言と同時に必ず初期化が必要。主に定数に使用。
  • readonly:実行時にコンストラクタで値を設定できるため、設定ファイルの読み込み結果など、実行時まで確定しない値にも対応可能。

まとめ

C#でJavaのfinal変数に相当する動作を実現したい場合は、readonlyを使用します。また、クラスの継承を禁止したい場合はsealedキーワードが対応します。用途に応じてこれらのキーワードを使い分けることで、安全で保守性の高いコードを書くことができます。

  1. JavaScriptのundefined(未定義)とは?変数の判定方法をサンプルコードで解説

    JavaScriptのundefined(未定義)は、変数がまだ宣言されていない、あるいは宣言されていても値が代入されていないことを示す特殊な値です。変数の状態を確認したい場面で頻繁に登場するため、初心者の方にとって押さえておきたい重要な概念の一つです。 undefinedの基本的な役割 undefinedは、次のような状況で返される値です。 変数を宣言したものの、まだ値を代入していない場合 存在しないオブジェクトのプロパティにアクセスした場合 関数の引数が渡されなかった場合 以下は、JavaScriptのundefinedを使って、変数が定義済みかどうかを判定する実装例です。 サンプルコ

  2. HTMLのreadOnly属性とは?読み取り専用フィールドの使い方を解説

    HTMLのreadOnly属性は、<input>要素や<textarea>要素を読み取り専用にするための属性です。この属性を指定すると、ユーザーはフォームフィールドの内容を編集できなくなりますが、テキストの選択やコピーは引き続き可能です。 readOnly属性の基本構文 readOnly属性は論理属性(ブール型属性)のため、値を指定せずに記述します。基本構文は以下の通りです。 <tagname readOnly></tagname> readOnly属性が使える要素 readOnly属性を指定できるのは、テキスト入力系の要素のみです。主な対象