정적 멤버 변수를 포함하는 타입이 있다면 인스턴스를 생성하기 전에 반드시 정적 멤버 변수를

초기화해야한다. 이를 위해 C#에서는 정적 멤버 초기화 구문과 정적 생성자라는 두 가지 기능을

제공한다. 정적 생성자는 타입 내에 정의된 모든 메서드, 변수, 속성에 최초로 접근하기 전에

자동으로 호출되는 특이한 메서드다. 이 메서드를 활용하면 정적 변수를 초기화하거나, 싱글톤

패턴을 적용하거나, 혹은 여타의 작업을 효과적으로 수행할 수 있다. 정적 변수를 초기화하기

위해서 인스턴스 생성자나 전용의 private 메서드 혹은 다른 관용구를 사용해서는 안 된다.

정적 필드를 초기화하는 과정이 매우 복잡하거나 혹은 상당한 자원을 소비하는 경우라면

Lazy<T>를 사용하여 해당 필드에 최초로 접근하는 시점까지 초기화 작업을 미룰 수 있다.

인스턴스 멤버 초기화와 마찬가지로 정적 멤버를 간단히 초기화하는 경우라면 정적 생성자를

사용하기보다는 멤버 초기화 구문을 사용하는 것이 좋다. 하지만 초기화 과정이 복잡하다면 정적

생성자를 사용하는 것도 나쁘지 않다. C#에서 정적 생성자를 사용하는 대표적인 사례중 하나가

싱글톤(singleton)패턴을 구현하는 경우다. 간단하게는 다음과 같이 인스턴스 생성자를 private으로

선언하고 멤버 초기화 구문을 사용하면 된다.

public class MySingleton
{
		private static readonly Mysingleton theOneAndOnly = new MySingleton();

		public static MySingleton TheOnly
		{
				get
				{
						return theOneAndOnly;
				}
		}

		private MySingleton()
		{
		}

		// 이하 생략
}

초기화 과정이 더 복잡한 경우라면 다음과 같이 정적 생성자를 사용하는 것도 좋은 방법이다.

public class MySingleton2
{
		private static readonly MySingleton2 theOneAndOnly;

		static MySingleton2()
		{
				theOneAndOnly = new MySingleton2();
		}

		public static MySingleton2 TheOnly
		{
				get
				{
						return theOneAndOnly;
				}
		}

		private MySingleton2()
		{
		}

		// 이하 생략
}

인스턴스 멤버 초기화 구문과 마찬가지로 정적 멤버 초기화 구문 또한 정적 생성자가 호출되기