> 백엔드 개발 > C++ > C#의 정적 클래스 초기화 순서를 예측할 수 있습니까?

C#의 정적 클래스 초기화 순서를 예측할 수 있습니까?

DDD
풀어 주다: 2025-01-04 20:15:41
원래의
861명이 탐색했습니다.

Is C#'s Static Class Initialization Order Predictable?

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

C#의 정적 클래스 초기화 순서는 실제로 결정적입니다. ECMA-334 표준에 따르면:

  • 정적 필드 이니셜라이저는 정적 생성자 직전에 실행됩니다.
  • 정적 생성자의 실행은 정적 필드를 처음 사용할 때 트리거됩니다. 또는 클래스의 인스턴스가 생성될 때.
  • 클래스에 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);
    }
}
로그인 후 복사

실행 순서

  1. A.X는 Main(), A() 초기화 트리거
  2. A().X 초기화에는 B.X가 필요하며 B()를 호출합니다.
  3. B().X는 7(Console.WriteLine)로 초기화됩니다. ("B.X = 7")).
  4. B().X가 수정되고 Console.WriteLine("B.X = 0")이 실행됩니다.
  5. A().X는 B.X 1(Console.WriteLine("A.X = 1"))로 설정됩니다.
  6. Console.WriteLine("A = 1, B = 0")이 출력됩니다.

재배열 고려사항

클래스 A와 B를 재배치하더라도 A.X를 처음 사용할 때 초기화 체인이 트리거되기 때문에 초기화 순서는 동일하게 유지됩니다.

결론

정적 클래스 초기화 순서는 결정적이며 다음에 설명된 규칙을 따릅니다. ECMA-334 표준. 정적 멤버를 처음 사용하거나 인스턴스를 생성하면 초기화 프로세스가 시작되며, 이는 필드 이니셜라이저와 정적 생성자 순서대로 진행됩니다.

위 내용은 C#의 정적 클래스 초기화 순서를 예측할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿