C#におけるコンストラクターの詳細

コンストラクターはクラス名と同一のメソッドであり、明示的な宣言がない場合、システムはコンパイル時に引数を取らない初期化処理を行わないデフォルトコンストラクターを自動生成します。しかし、明示的に引数付きコンストラクターを定義すると、自動生成はされなくなり、インスタンス生成時にその引数付きコンストラクターを使用しなければなりません。

Code using System; namespace TechBlog.Examples { public class SampleClass { private int initialValue; public SampleClass(int value) { initialValue = value * 2; }

static void Main() { SampleClass instance = new SampleClass(10); Console.WriteLine(instance.initialValue); } } }

静的コンストラクターについても説明します。C#ではクラスに無引数の静的コンストラクターを定義可能です。このメソッドはクラスの最初のインスタンス生成時または静的メンバーへのアクセス時に一度だけ実行されます。通常、外部データソースからの初期化処理が必要な静的フィールドの準備に使用されます。

静的コンストラクターはアクセス修飾子を持たず、明示的な呼び出しが不可で.NETランタイムが自動的に実行します。以下の例を見てください。

static void Main()
{
WebDomainHandler handler = new WebDomainHandler();
}
}
}

複数のコンストラクターを持つ場合、初期化処理の重複を避けるためにコンストラクター初期化子を使用します。以下はその例です。

public WebDomainHandler(string name, string address)
{
domainName = name;
fullUrl = address;
}

public WebDomainHandler(string name) : this(name, "techblog.net")
{
}

static void Main()
{
WebDomainHandler handler = new WebDomainHandler("main");
Console.WriteLine(handler.fullUrl);
}
}
}

このコードではコンストラクター初期化子:this()を使用して共通の初期化ロジックを再利用しています。初期化子はコンストラクター本体よりも先に実行される点に注意が必要です。

readonly修飾子についても説明します。readonlyフィールドはconstと異なり、初期化タイミングが柔軟です。コンストラクター内で値を設定できますが、それ以降の変更は許可されません。

タグ: C# コンストラクター 静的コンストラクター readonly 初期化子

5月20日 14:44 投稿