다음을 통해 공유


형식 생성자 디자인

형식 생성자는 형식에서 정적 데이터를 초기화하는 데 사용되며, 형식의 인스턴스가 만들어지기 전에 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.

참고 항목

개념

생성자 디자인

기타 리소스

멤버 디자인 지침

클래스 라이브러리 개발을 위한 디자인 지침