>백엔드 개발 >C++ >C#의 정적 클래스 초기화 순서는 결정적이라고 보장됩니까?

C#의 정적 클래스 초기화 순서는 결정적이라고 보장됩니까?

Barbara Streisand
Barbara Streisand원래의
2025-01-04 15:07:40578검색

Is C#'s Static Class Initialization Order Guaranteed to Be Deterministic?

C#의 정적 클래스 초기화 순서는 결정적인가요?

C#에서는 정적 클래스를 처음 사용할 때 초기화됩니다. 그러나 여러 정적 클래스 간의 초기화 순서가 항상 명확한 것은 아닙니다. 이 문서에서는 C#에서 정적 클래스 초기화의 결정적 특성과 이것이 코드 실행에 어떤 영향을 미치는지 살펴봅니다.

결정적 초기화 순서

정적 클래스 초기화 순서는 제어됩니다. 다음 규칙을 따릅니다.

  • 정적 필드 이니셜라이저가 클래스에 있으면 즉시 실행됩니다. 클래스의 정적 생성자 앞에 있습니다.
  • 클래스에 정적 생성자가 있는 경우 클래스의 정적 멤버가 참조되거나 클래스의 인스턴스가 생성될 때 해당 생성자가 실행됩니다.
  • 클래스에 Main 메서드가 포함되어 있는 경우 Main 메서드가 호출되기 전에 해당 정적 생성자가 실행됩니다. 호출됩니다.

다음 코드를 고려하세요.

static class B
{
    public static int X = 7;
    static B() { Console.WriteLine("B.X = " + X); X = A.X; Console.WriteLine("B.X = " + X); }
}

static class A
{
    public static int X = B.X + 1;
    static A() { Console.WriteLine("A.X = " + X); }
}

static class Program
{
    static void Main()
    {
        Console.WriteLine("A = {0}, B = {1}", A.X, B.X);
    }
}

이 코드는 정적 클래스 초기화의 결정적 특성을 보여줍니다. A.X가 Main에서 참조되면 정적 생성자가 실행됩니다. A.X는 B의 초기화를 트리거하는 B.X를 사용하여 초기화됩니다. 따라서 코드의 출력은 항상 다음과 같습니다.

A.X = 1
B.X = 7
B.X = 0
A = 1, B = 0

결론

정적 클래스 초기화 C#에서는 잘 정의된 순서를 따릅니다. 의도한 대로 작동하는 코드를 작성하려면 이 순서를 이해하는 것이 중요합니다. 위에 설명된 규칙을 준수함으로써 개발자는 여러 컴파일 및 실행에서도 정적 클래스가 올바르고 일관되게 초기화되도록 할 수 있습니다.

위 내용은 C#의 정적 클래스 초기화 순서는 결정적이라고 보장됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.