>백엔드 개발 >C++ >C#은 정적 클래스 초기화에 대한 결정적 순서를 어떻게 보장합니까?

C#은 정적 클래스 초기화에 대한 결정적 순서를 어떻게 보장합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-03 17:19:42674검색

How Does C# Guarantee a Deterministic Order for Static Class Initialization?

C#의 정적 클래스 초기화의 결정적 순서

C#의 정적 클래스 초기화 순서는 ECMA 사양에 명시되어 있습니다. 이 순서는 프로그램 동작의 일관성을 보장합니다.

ECMA-334에 따르면:

  • 정적 필드 이니셜라이저가 존재하는 경우 해당 정적 생성자 바로 앞에서 실행됩니다.
  • 정적 생성자가 없는 경우 이니셜라이저는 정적 필드를 사용하기 전에 구현에 따른 시간에 실행됩니다. 클래스.
  • 정적 생성자의 실행은 클래스의 인스턴스가 생성되거나 정적 멤버가 참조될 때 트리거됩니다.
  • Main 메서드가 있는 클래스에서 정적 생성자는 주요 메소드.

주어진 코드 샘플에서:

  1. A.X 참조 in Main은 A.X 초기화를 트리거합니다.
  2. A.X 초기화에는 B.X가 필요하므로 B.X 초기화를 시작합니다.
  3. B.X에는 기본값 7이 할당됩니다. 출력: "B.X = 7."
  4. 정적 B()가 호출되어 "B.X = 0."
  5. A.X는 B.X 1로 초기화되어 A.X = 1이 됩니다.
  6. Static A()가 호출되어 "A.X = 1"이 출력됩니다.
  7. 마지막으로, 메인은 "A = 1, B = 0"을 인쇄합니다.

The 표준에서는 일관성을 유지하기 위해 기본 상태의 변수 이니셜라이저가 있는 정적 필드를 관찰하는 것을 권장하지 않습니다.

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

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