C#の定数キーワード「static readonly」と「const」の比較とコード例
C#における「static readonly」と「const」の違い
**C#**において、「static readonly」と「const」はどちらも定数を定義するためのキーワードですが、その挙動や用途に違いがあります。
constキーワード
- コンパイル時に定数化: 「const」で定義された値はコンパイル時に定数に置き換えられます。つまり、プログラムの実行中に値を変更することはできません。
- 直接値: 「const」は直接値のみを指定できます。変数や式は使用できません。
- スタックまたはリテラル: 「const」で定義された値は、スタックまたはリテラルとして格納されます。
- パフォーマンス: 一般的に、「const」を使用した定数はパフォーマンスが優れています。
const double PI = 3.14159;
static readonlyキーワード
- 実行時に定数化: 「static readonly」で定義された値は、クラスのロード時に定数化されます。つまり、プログラムの実行中に値を変更することはできますが、一度定数化されると変更することはできません。
- 式や変数: 「static readonly」は式や変数を指定できます。
- フィールド: 「static readonly」はクラスのフィールドとして定義されます。
- パフォーマンス: 「const」ほどパフォーマンスは優れませんが、実行時に値を計算できる柔軟性があります。
static readonly DateTime CurrentDate = DateTime.Now;
いつどちらを使うべきか
- コンパイル時に値がわかっている場合: 「const」を使用します。
- 実行時に値を計算する必要がある場合: 「static readonly」を使用します。
- パフォーマンスが重要な場合: 「const」を使用します。
- 柔軟性が必要な場合: 「static readonly」を使用します。
C#の定数キーワード「static readonly」と「const」の比較とコード例
C#において、定数を定義する際に使用するキーワードとして「static readonly」と「const」がよく用いられます。両者とも定数値を保持しますが、その挙動や用途に違いがあります。本記事では、それぞれのキーワードの特徴と具体的なコード例を用いて、その違いを詳しく解説します。
- コンパイル時定数: コンパイル時に値が確定し、プログラムの実行中に変更することはできません。
- 直接値のみ: 変数や式を用いることはできず、直接値を指定します。
コード例:
const double PI = 3.14159;
- 解説: 円周率PIは数学的な定数であり、プログラムの実行中に変化することはないため、constで定義するのが適しています。
- 実行時定数: クラスのロード時に値が確定し、プログラムの実行中に変更することはできませんが、コンパイル時に値が確定する必要はありません。
- 式や変数: 式や変数を用いて値を初期化できます。
- 柔軟性: constよりも柔軟な初期化方法が可能です。
static readonly DateTime CurrentDate = DateTime.Now;
- 解説: CurrentDateはプログラムの実行時に現在の日時を取得し、定数として設定します。この値はプログラムの実行中に変化することはありませんが、コンパイル時にはその値が確定しません。
- コンパイル時に値が確定している場合: const
- パフォーマンスが特に重要な場合: const
- 柔軟な初期化が必要な場合: static readonly
enum型
- 列挙型: 定義された値の集合を表現します。
- 用途: 状態やフラグなどを表現する場合に適しています。
- 特徴:
- 値は整数型と関連付けられます。
- メンバーは暗黙的にstaticであり、変更できません。
enum Color
{
Red,
Green,
Blue
}
readonlyフィールド
- 読み取り専用フィールド: インスタンスレベルで値を変更できないフィールドを定義します。
- 用途: オブジェクトの状態を保持する際に使用します。
- 特徴:
- コンストラクタで初期化されます。
- static修飾子をつけないことでインスタンスごとに異なる値を持つことができます。
class Person
{
public readonly string Name;
public Person(string name)
{
Name = name;
}
}
定数クラス
- 定数専用のクラス: すべてのメンバーがstatic readonlyのフィールドで構成されるクラスです。
- 用途: 複数の定数をグループ化したい場合に便利です。
public static class MathConstants
{
public const double PI = 3.14159;
public static readonly double E = 2.71828;
}
各方法の比較
c# constants