>  기사  >  백엔드 개발  >  C#에서 정적 생성자를 사용하는 방법은 무엇입니까?

C#에서 정적 생성자를 사용하는 방법은 무엇입니까?

WBOY
WBOY앞으로
2023-08-23 22:25:02857검색

C#에서 정적 생성자를 사용하는 방법은 무엇입니까?

정적 생성자는 정적 데이터를 초기화하거나 특정 작업을 수행하는 데 사용됩니다. 번역해야 할 내용은 다음과 같습니다. 첫 번째 통화 전에 자동으로 수행되는 작업 인스턴스가 생성되거나 정적 멤버가 참조되는 경우.

정적 생성자는 비관리 코드에 대한 래퍼 클래스를 만들 때 매우 유용합니다. 생성자가 LoadLibrary 메서드를 호출할 수 있는 경우. 정적 생성자에도 동일하게 적용됩니다. 런타임 시 확인할 수 없는 유형 매개변수를 적용하는 편리한 장소 제약 조건은 컴파일 타임에 확인됩니다.

정적 생성자는 다음과 같은 속성을 갖습니다. −

  • 정적 생성자는 액세스 수정자나 매개변수를 허용하지 않습니다.

  • 클래스나 구조체에는 정적 생성자가 하나만 있을 수 있습니다.

  • 정적 생성자는 상속되거나 오버로드될 수 없습니다.

  • 정적 생성자는 직접 호출할 수 없으며 다른 메서드를 통해서만 호출할 수 있습니다.

CLR(공용 언어 런타임). 자동으로 호출됩니다.
  • 사용자는 정적 생성자가 실행되는 시기를 제어할 수 없습니다. 프로그램.

  • 클래스를 초기화하기 전에 정적 생성자가 자동으로 호출됩니다. 첫 번째 인스턴스가 생성되거나 정적 멤버를 참조합니다. 정적 생성자는 인스턴스 생성자보다 먼저 실행됩니다. 유형의 정적 생성자 정적 메서드가 이벤트나 대리자에 할당되어 호출될 때 호출됩니다. 그리고 할당되었을 때는 그렇지 않습니다. 정적 필드 변수 이니셜라이저가 있는 경우 정적 생성자의 클래스에서는 텍스트 순서대로 실행됩니다. 텍스트 순서로 실행될 정적 생성자가 있는 클래스 실행 전에 클래스 선언에 나타납니다. 정적 필드를 초기화하는 정적 생성자를 제공하지 않으면 모든 정적 필드는 선언된 순서대로 처음 액세스할 때 자동으로 초기화됩니다.

  • 필드는 C#의 기본값에 나열된 값으로 초기화됩니다. 정적 생성자가 예외를 발생시키는 경우 런타임에서 호출되지 않습니다. 두 번째로 실행하면 유형은 평생 동안 초기화되지 않은 상태로 유지됩니다. 프로그램이 실행되는 애플리케이션 도메인입니다. 가장 일반적으로, TypeInitializationException은 정적 생성자가 던져질 때 발생합니다. 유형을 인스턴스화할 수 없거나 처리되지 않은 예외가 발생하는 경우 정적 생성자. 명시적으로 정의되지 않은 암시적 정적 생성자의 경우 소스 코드에 정의되어 있어 문제 해결 시 확인이 필요할 수 있습니다. IL(중간 언어) 코드입니다.
  • 정적 생성자가 있으면 추가할 수 없습니다. BeforeFieldInit 유형 속성입니다. 이는 런타임 최적화를 제한합니다.

  • 정적 읽기 전용으로 선언된 필드는 해당 필드의 일부로만 할당될 수 있습니다. 선언이나 정적 생성자에서. 명시적인 정적 생성자가 없는 경우 번역해야 할 내용은 다음과 같습니다. 필수, 정적 필드를 통하지 않고 선언 시 정적 필드를 초기화합니다. 번역해야 할 내용은 다음과 같습니다. 필수, 정적 필드를 통하지 않고 선언 시 정적 필드를 초기화합니다. 생성자는 더 나은 런타임 최적화를 위해 사용됩니다.

  • Example

    라이브 데모

    using System;
    namespace DemoApplication{
       public class Program{
          static void Main(string[] args){
             Car user = new Car();
             Car user1 = new Car();
             Console.ReadLine();
          }
       }
       public class Car{
          static Car(){
             Console.WriteLine("Static constructor called");
          }
          public Car(){
             Console.WriteLine("Default constructor called");
          }
       }
    }

    Output

    Static constructor called
    Default constructor called
    Default constructor called

    위의 예에서는 정적 생성자가 한 번만 호출되는 것을 볼 수 있습니다.

    온라인 데모

    using System;
    using System.Threading;
    namespace DemoApplication{
       public class Car{
          protected static readonly DateTime globalStartTime;
          protected int RouteNumber { get; set; }
          static Car(){
             globalStartTime = DateTime.Now;
             Console.WriteLine($"Static constructor called. Global start time:
             {globalStartTime.ToLongTimeString()}");
          }
          public Car(int routeNum){
             RouteNumber = routeNum;
             Console.WriteLine($"Car {RouteNumber} is created.");
          }
          public void Drive(){
             TimeSpan elapsedTime = DateTime.Now - globalStartTime;
             Console.WriteLine($"Car {this.RouteNumber} is starting its route
             {elapsedTime.Milliseconds} minutes after global start time
             {globalStartTime.ToShortTimeString()}.");
          }
       }
       class TestCar{
          static void Main(){
             Car car1 = new Car(1);
             Car car2 = new Car(2);
             car1.Drive();
             Thread.Sleep(25);
             car2.Drive();
             Console.ReadLine();
          }
       }
    }

    출력

    Static constructor called. Global start time:
    7:09:06 AM
    Car 1 is created.
    Car 2 is created.
    Car 1 is starting its route25 minutes after global start time7:09 AM.
    Car 2 is starting its route50 minutes after global start time7:09 AM.

    위 내용은 C#에서 정적 생성자를 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    이 기사는 tutorialspoint.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제