C # -9에서 '데이터 멤버'를 사용하는 방법

Nov 19 2020

C # 9에 대한 새 구문을 시도했지만 데이터 멤버 를 사용하지 못했습니다 .

문서에 따르면 구문은 다음과 같습니다.

public data class Person { string FirstName; string LastName; }

그러나 다음과 같은 컴파일 오류가 발생했습니다.

CS0116: A namespace cannot directly contain members such as fields or methods
IDE1007: The name 'data' does not exist in the current context.

나는 다른 구문을 시도해 보았고 모두 작동했습니다. 그래서 저는 C # -9를 사용하고 있다고 확신합니다.

업데이트 : 이 질문 은 가능한 답변으로 제안됩니다.

그러나 그것은 내 대답이 아니며 그 링크에서 받아 들여지는 대답이 잘못되었다고 생각합니다. 레코드 유형과 데이터 멤버는 서로 다른 두 가지입니다. 데이터 멤버는 변경 불가능한 유형을 정의하는 새로운 방법이며 레코드 유형은 값 객체입니다.
문서는 데이터 멤버 클래스에서 전용 필드와 같은 속성을 정의하기 만하면되므로 다음 Person과 같습니다.

public data class Person
{
    public string FirstName { get; init; }
    public string LastName { get; init; }
}

답변

2 AnuViswan Nov 19 2020 at 14:30

data클래스는 이제 record. 그것들은 값 유형처럼 동작하는 동일하고 불변의 객체입니다 (구조적 또는 다른 말로 값 기반 동등성을 나타냄).

OP의 코드와 관련하여

public data class Person { string FirstName; string LastName; }

다음과 같이 다시 작성할 수 있습니다.

public record Person(string FirstName, string LastName);

위의 구문은 Primary Constructor를 사용합니다 . 기본 생성자를 건너 뛰려면 레코드를 다음과 같이 선언 할 수도 있습니다.

public record Person
{
    public string FirstName { get; init; }
    public string LastName { get; init; }
}

두 경우 모두 Properties, FirstName 및 LastName은 초기화 중에 만 할당 할 수 있으며 (생성자 또는 개체 이니셜 라이저를 통해) 그 이후에는 할당 할 수 없습니다.