다음을 통해 공유


자동으로 구현된 속성

속성 접근자에 다른 논리가 필요하지 않은 경우 자동으로 구현된 속성은 속성 선언을 더 간결하게 만듭니다. 이를 통해 클라이언트 코드에서 개체를 만들 수도 있습니다. 다음 예제와 같이 속성을 선언할 때 컴파일러는 속성의 getset 접근자를 통해서만 액세스할 수 있는 전용 익명 지원 필드를 만듭니다. init 접근자는 자동으로 구현된 속성으로 선언할 수도 있습니다.

다음 예제에서는 자동으로 구현된 몇 가지 속성이 있는 간단한 클래스를 보여줍니다.

// This class is mutable. Its data can be modified from
// outside the class.
public class Customer
{
    // Auto-implemented properties for trivial get and set
    public double TotalPurchases { get; set; }
    public string Name { get; set; }
    public int CustomerId { get; set; }

    // Constructor
    public Customer(double purchases, string name, int id)
    {
        TotalPurchases = purchases;
        Name = name;
        CustomerId = id;
    }

    // Methods
    public string GetContactInfo() { return "ContactInfo"; }
    public string GetTransactionHistory() { return "History"; }

    // .. Additional methods, events, etc.
}

class Program
{
    static void Main()
    {
        // Initialize a new object.
        Customer cust1 = new Customer(4987.63, "Northwind", 90108);

        // Modify a property.
        cust1.TotalPurchases += 499.99;
    }
}

인터페이스에서 자동으로 구현된 속성을 선언할 수 없습니다. 자동으로 구현되고 필드 백업 속성은 프라이빗 인스턴스 지원 필드를 선언하며 인터페이스는 인스턴스 필드를 선언할 수 없습니다. 본문을 정의하지 않고 인터페이스에서 속성을 선언하면 접근자가 있는 속성이 선언됩니다. 해당 인터페이스를 구현하는 각 형식은 해당 속성을 구현해야 합니다.

필드와 유사하게 자동으로 구현된 속성을 초기화할 수 있습니다.

public string FirstName { get; set; } = "Jane";

앞의 예제에 표시된 클래스는 변경할 수 있습니다. 클라이언트 코드에서는 개체가 만들어진 후에 개체의 값을 변경할 수 있습니다. 데이터 및 중요 동작(메서드)을 포함하는 복잡한 클래스에는 public 속성이 필요한 경우가 많습니다. 그러나 값 세트(데이터)만 캡슐화하고 동작이 적거나 없는 작은 클래스나 구조체의 경우 다음 옵션 중 하나를 사용하여 개체를 변경할 수 없게 해야 합니다.

  • get 접근자만 선언합니다(생성자를 제외한 모든 위치에서 변경할 수 없음).
  • get 접근자와 init 접근자를 선언합니다(개체 생성 중을 제외하고 모든 위치에서 변경할 수 없음).
  • set 접근자를 프라이빗으로 선언합니다(소비자가 변경할 수 없음).

자세한 내용은 자동으로 구현된 속성을 사용하여 경량 클래스를 구현하는 방법을 참조 하세요.

자동으로 구현된 속성에 유효성 검사를 추가해야 할 수 있습니다. C# 13은 필드 지원 속성을 미리 보기 기능으로 추가합니다. 키워드를 field 사용하여 자동으로 구현된 속성의 컴파일러 합성 지원 필드에 액세스합니다. 예를 들어 이전 예제의 FirstName 속성을 빈 문자열로 null 설정할 수 없도록 할 수 있습니다.

public string FirstName 
{ 
    get; 
    set 
    { 
        field = (string.IsNullOrWhiteSpace(value) is false
            ? value
            : throw new ArgumentException(nameof(value), "First name can't be whitespace or null"));
    }
} = "Jane";

이 기능을 사용하면 지원 필드를 명시적으로 선언할 필요 없이 접근자에 논리를 추가할 수 있습니다. 키워드를 field 사용하여 컴파일러에서 생성된 지원 필드에 액세스합니다.

Important

field 키워드는 C# 13의 미리 보기 기능입니다. 상황별 키워드를 사용하려면 .NET 9를 preview 사용하고 field 프로젝트 파일에서 요소를 설정 <LangVersion> 해야 합니다.

이름이 지정된 field필드가 field 있는 클래스에서 키워드 기능을 사용하는 데 주의해야 합니다. 새 field 키워드는 속성 접근자의 범위에 명명된 field 필드를 숨깁니다. 변수의 field 이름을 변경하거나 토큰을 사용하여 @ 식별자를 .로 @field참조 field 할 수 있습니다. 키워드에 대한 field 기능 사양을 읽어 자세히 알아볼 수 있습니다.

참고 항목