생성자(C# 프로그래밍 가이드)

클래스 또는 구조체의 instance 만들 때마다 해당 생성자가 호출됩니다. 클래스 또는 구조체에는 서로 다른 인수를 사용하는 여러 생성자가 있을 수 있습니다. 프로그래머는 생성자를 통해 기본값을 설정하고, 인스턴스화를 제한하며, 유연하고 읽기 쉬운 코드를 작성할 수 있습니다. 자세한 내용 및 예제는 인스턴스 생성자생성자 사용을 참조하세요.

새 instance 초기화하는 몇 가지 작업이 있습니다. 이러한 작업은 다음 순서로 수행됩니다.

  1. 인스턴스 필드는 0으로 설정됩니다. 이 작업은 일반적으로 런타임에서 수행됩니다.
  2. 필드 이니셜라이저가 실행됩니다. 가장 파생된 형식 실행의 필드 이니셜라이저입니다.
  3. 기본 형식 필드 이니셜라이저가 실행됩니다. 필드 이니셜라이저는 각 기본 형식을 통해 에서 로 직접 베이스로 시작합니다 System.Object.
  4. 기본 instance 생성자가 실행됩니다. 각 기본 클래스를 통해 직접 기본 클래스로 Object.Object 시작하는 모든 instance 생성자입니다.
  5. instance 생성자가 실행됩니다. 형식에 대한 instance 생성자가 실행됩니다.
  6. 개체 이니셜라이저가 실행됩니다. 식에 개체 이니셜라이저가 포함된 경우 instance 생성자가 실행된 후 실행됩니다. 개체 이니셜라이저는 텍스트 순서로 실행됩니다.

이전 작업은 새 instance 초기화될 때 수행됩니다. 의 struct 새 instance 해당 default 값으로 설정되면 모든 instance 필드가 0으로 설정됩니다.

정적 생성자가 실행되지 않은 경우 정적 생성자는 instance 생성자 작업이 발생하기 전에 실행됩니다.

생성자 구문

생성자는 이름이 해당 형식의 이름과 동일한 메서드입니다. 해당 메서드 서명에는 선택적 액세스 한정자, 메서드 이름 및 해당 매개 변수 목록만 포함됩니다. 반환 형식을 포함하지 않습니다. 다음 예제에서는 Person이라는 클래스에 대한 생성자를 보여 줍니다.

public class Person
{
   private string last;
   private string first;

   public Person(string lastName, string firstName)
   {
      last = lastName;
      first = firstName;
   }

   // Remaining implementation of Person class.
}

생성자를 단일 문으로 구현할 수 있는 경우 식 본문 정의를 사용할 수 있습니다. 다음 예제에서는 생성자에 name이라는 단일 문자열 매개 변수가 있는 Location 클래스를 정의합니다. 식 본문 정의에서 locationName 필드에 인수를 할당합니다.

public class Location
{
   private string locationName;

   public Location(string name) => Name = name;

   public string Name
   {
      get => locationName;
      set => locationName = value;
   }
}

정적 생성자

앞의 예제에서는 새 개체를 만드는 인스턴스 생성자를 모두 보여 주었습니다. 클래스 또는 구조체에 형식의 정적 멤버를 초기화하는 정적 생성자도 있을 수 있습니다. 정적 생성자에는 매개 변수가 없습니다. 정적 필드를 초기화하는 정적 생성자를 제공하지 않으면 C# 컴파일러는 정적 필드를 C# 형식의 기본값에 나열된 기본값으로 초기화합니다.

다음 예제에서는 정적 생성자를 사용하여 정적 필드를 초기화합니다.

public class Child : Person
{
   private static int maximumAge;

   public Child(string lastName, string firstName) : base(lastName, firstName)
   { }

   static Child() => maximumAge = 18;

   // Remaining implementation of Child class.
}

다음 예제와 같이 식 본문 정의를 사용하여 정적 생성자를 정의할 수도 있습니다.

public class Child : Person
{
   private static int maximumAge;

   public Child(string lastName, string firstName) : base(lastName, firstName)
   { }

   static Child() => maximumAge = 18;

   // Remaining implementation of Child class.
}

자세한 내용 및 예제는 정적 생성자를 참조하세요.

섹션 내용

참고 항목