형식 생성자 디자인
형식 생성자는 형식에서 정적 데이터를 초기화하는 데 사용되며, 형식의 인스턴스가 만들어지기 전에 CLR(공용 언어 런타임)에서 호출됩니다. 형식 생성자는 static(Visual Basic의 경우 Shared)이며 매개 변수를 사용할 수 없습니다.
다음 지침은 최선의 방법으로 정적 생성자를 사용하는 데 도움이 됩니다.
형식 생성자를 전용으로 만들지 않습니다.
형식 생성자는 클래스 생성자 또는 정적 생성자라고도 하며 형식을 초기화하는 데 사용됩니다. CLR에서는 형식의 첫 번째 인스턴스가 만들어지거나 형식의 정적 멤버가 호출되기 전에 형식 생성자를 호출합니다. 형식 생성자가 전용이 아닌 경우 CLR 이외의 다른 코드로 호출할 수 있습니다. 생성자에서 수행되는 연산에 따라 예기치 않은 동작이 발생할 수 있습니다.
형식 생성자에서 예외를 throw하지 않습니다.
형식 생성자가 예외를 throw하는 경우 예외가 throw된 응용 프로그램 도메인에서 형식을 사용할 수 없습니다.
CLR는 정적 생성자를 명시적으로 정의하지 않은 형식의 성능을 최적화할 수 있으므로 정적 생성자를 명시적으로 사용하는 대신 정적 필드를 인라인으로 초기화할 수 있습니다.
다음 코드 예제에서는 최적화할 수 없는 디자인을 보여 줍니다.
Public Class BadStaticExample
Shared runId as Guid
Shared Sub New()
runId = Guid.NewGuid()
End Sub
' Other members...
End Class
public class BadStaticExample
{
static Guid runId;
static BadStaticExample()
{
runId = Guid.NewGuid();
}
// Other members...
}
public ref class BadStaticExample
{
static Guid runId;
static BadStaticExample()
{
runId = Guid::NewGuid();
}
// Other members...
};
다음 코드 예제는 최적화할 수 있습니다.
Public Class GoodStaticExample
Shared runId as Guid = Guid.NewGuid()
' Other members...
End Class
public class GoodStaticExample
{
static Guid runId = Guid.NewGuid();
// Other members...
}
public ref class GoodStaticExample
{
static Guid runId = Guid::NewGuid();
// Other members...
};
Portions Copyright 2005 Microsoft Corporation. All rights reserved.
Portions Copyright Addison-Wesley Corporation. All rights reserved.
디자인 지침에 자세한 내용은 참조를 "Framework 디자인 지침: 규칙, 숙어, 및 재사용에 대 한 패턴입니다.NET 라이브러리"도 서 Krzysztof Cwalina와 Brad Abrams, 게시 Addison-wesley, 2005.