C#でクラスのコンストラクタにstaticを付けるとスタティックコンストラクタとなる。
スタティックコンストラクタは最初のインスタンスを作成する前、または静的メンバが参照される前に自動的に呼び出される。
初期化時に1度だけ行いたい処理などを書くのに使える。
以下に示すサンプルコードでスタティックコンストラクタがどういった動きをするのかが分かるだろう。
Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace StaticConstructor
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
/// <summary>
/// テストクラス
/// </summary>
class MyClass
{
/// <summary>
/// スタティックコンストラクタ
/// </summary>
static MyClass()
{
Console.WriteLine("MyClass static constructor");
}
/// <summary>
/// コンストラクタ
/// </summary>
public MyClass()
{
Console.WriteLine("constructor");
}
}
/// <summary>
/// WindowsFormsアプリケーション
/// 画面に一つ配置したボタンのクリックイベントハンドラ
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
new MyClass();
}
}
}
画面にボタンを一つだけ配置したWindowsFormsアプリケーションである。
そのボタンのイベントハンドラではテスト用のMyClassのインスタンス生成のみを行っている。
アプリを起動し、ボタンを始めに押すと
MyClass static constructor
constructor
のように表示される。2回目以降は、ボタンを押すと
constructor
だけが表示される。
私は比較的長くC#を使ってきたが、このスタティックコンストラクタというものがあるということは今日初めて知った。
シングルトンクラスの初期化処理などに使えそうである。