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은 초기화 중에 만 할당 할 수 있으며 (생성자 또는 개체 이니셜 라이저를 통해) 그 이후에는 할당 할 수 없습니다.