C # 9.0 레코드-nullable이 아닌 참조 형식 및 생성자
나는 단순한 기록을 시도했다.
#nullable enable
public record Product
{
public readonly string Name;
public readonly int CategoryId;
public readonly string Phone;
public readonly Address Address;
public readonly Manager Manager;
}
경고를받습니다.
nullable이 아닌 속성 'Name'이 초기화되지 않았습니다. 속성을 nullable로 선언하는 것이 좋습니다.
(CategoryId를 제외한 모든 필드에 대해 동일)
기본적으로 올바르게 이해하면 모든 필드를 수락하고 설정하는 생성자 가 컴파일러에 의해 자동 생성 되지 않으며 (사용할 때 #nullable enable
) 직접 작성해야합니다.
public Product(string Name, int CategoryId, string Phone, Address Address, Manager Manager) {
this.Name=Name;
this.CategoryId=CategoryId;
...
}
제 질문은 이것이 맞습니까? 나는 전체 요점이 그렇게 간단하게 레코드를 만드는 것이라고 생각했기 때문에 매우 놀랐고 생성자를 작성 / 유지 관리하는 것은 매우 지루하며, 특히 자주 변경되는 큰 레코드에서 그렇습니다. 아니면 여기에 뭔가 빠졌나요?
답변
3 IvanStoev
당신은 자동으로 생성 기다리고있을 것 같다 기본 생성자를 하지만, 당신이 활용할 때 자동 생성 (그리고 일반적으로 모든 레코드 혜택을받을)는 레코드 타입 선언에 기록 매개 변수를 자동으로 매핑됩니다, 공공 get및 init특성 등을 기본 생성자에서 자동으로 초기화되므로 NRT 경고가 제거됩니다.
즉, 기본적으로 record
키워드 가 추가 된 일반 생성자 구문을 사용하여 모든 레코드 유형 설탕을 얻습니다 .
public record Product(string Name, int CategoryId, string Phone, Address Address, Manager Manager) { }