C#のconst・static・readonlyの違いを徹底解説!正しい使い分け方
はじめに
C#では、変更されたくない値を扱う際に「const」「static」「readonly」という3つのキーワードを使い分けます。それぞれの役割や動作の違いを正しく理解することで、より安全で保守性の高いコードを書くことができます。本記事では、各キーワードの特徴と具体的な使用例をわかりやすく解説します。
const(定数)
constキーワードで宣言されたフィールドは定数であり、プログラムの実行中に値を変更することが一切できません。また、宣言の時点で必ず初期値を代入する必要があります。
const int a = 5;
constはコンパイル時に値が確定するため、固定の設定値や数学的な定数などに適しています。
static(静的メンバー)
staticキーワードは、メソッド、プロパティ、クラス、コンストラクターなど、さまざまなメンバーに適用できます。staticメンバーは特定のインスタンスではなくクラスそのものに属し、すべてのオブジェクト間で共有されます。
特に注意すべき点として、クラス自体にstatic修飾子を付けた場合、newキーワードによるインスタンス生成ができなくなります。
static int a = 10;
readonly(読み取り専用)
readonlyキーワードで宣言されたフィールドは、宣言時に初期化するか、コンストラクター内で一度だけ値を設定できます。実行時に値が確定する場合でも、一度代入されれば以降は変更できません。そのため、実行時の条件によって決まる定数的な値を扱いたい場合に非常に便利です。
次の例では、readonlyフィールドをコンストラクター内で初期化しています。
コード例
class Demo {
readonly int a;
public Demo( ) {
a = 5;
}
}まとめ
- const: 宣言時に必ず値を代入し、以後は変更不可(コンパイル時定数)
- static: クラスレベルで共有されるメンバー。staticクラスはインスタンス化不可
- readonly: 宣言時またはコンストラクター内で一度だけ代入可能。以後は変更不可
この3つは似ているようで用途が大きく異なります。値が完全に固定ならconst、全インスタンスで共有したいならstatic、実行時に決まる不変の値ならreadonlyと、目的に応じて適切に使い分けましょう。
-
JavaScriptのconstとletの違いを徹底解説!ブロックスコープ変数の基本と使い方
JavaScriptにおけるconstとletの基本const と let は、ES2015(ES6)で導入された変数宣言用のキーワードです。どちらもブロックスコープ(波括弧 { } で囲まれた範囲)に対応しているのが特徴で、関数スコープしか持たなかった従来の var とは異なる挙動を示します。両者の大きな違いは再代入の可否です。letで宣言した変数は後から何度でも値を再代入できますが、constで宣言した変数は再代入しようとするとエラー(TypeError)が発生します。letとconstの主な違い項目letconst再代入可能不可(エラー発生)スコープブロックスコープブロックスコープ宣言時
-
CSSのposition: static;とは?デフォルトの配置方法をわかりやすく解説
CSSのposition: static;は、要素の位置を「静的(スタティック)」に設定するプロパティ値です。実はこれが、すべての要素に初期状態で適用されているデフォルトの位置指定です。 position: static; の基本的な特徴 position: static;が指定された要素は、通常のドキュメントフローに従って配置されます。ここで重要なポイントは、次のとおりです。 HTMLの記述順序どおりに、上から下へ自然に配置される top・bottom・left・rightプロパティを指定してもまったく効果がない z-indexによる重なり順の制御も適用されない つまり、位置をずらしたい