필드 이니셜라이저는 비정적 멤버를 참조할 수 없습니다: 자세한 설명
필드 이니셜라이저를 사용하여 클래스의 필드를 초기화하려고 할 때 , 특정 제한사항을 준수하는 것이 중요합니다. 질문에서 알 수 있듯이 필드 이니셜라이저 내에서 비정적 멤버를 참조하면 오류가 발생합니다.
제공된 코드는 서비스 클래스 내에서 이 문제를 보여줍니다.
public class Service { DinnerRepository repo = new DinnerRepository(); // Error: Cannot reference non-static member `repo` Dinner dinner = repo.GetDinner(5); }
필드 때문에 오류가 발생합니다. 이니셜라이저는 클래스의 비정적 멤버를 참조하는 것이 허용되지 않습니다. 여기에는 인스턴스 변수, 메서드 및 속성이 포함됩니다.
대체 솔루션:
답변에서 제안된 대체 솔루션은 다음과 같습니다.
생성자 사용 초기화:
public class Service { private readonly DinnerRepository repo; private readonly Dinner dinner; public Service() { repo = new DinnerRepository(); dinner = repo.GetDinner(5); } }
로컬 사용 변수:
public class Service { DinnerRepository repo; Dinner dinner; public Service() { repo = new DinnerRepository(); dinner = repo.GetDinner(5); } }
그러나 다음 사항에 유의하는 것이 중요합니다. 후자의 접근 방식은 인스턴스가 아닌 지역 변수만 생성합니다.
필드 이니셜라이저에 대한 제한 사항:
C# 4 사양(섹션 10.5.5.2)에 따르면 필드 이니셜라이저는 생성되는 인스턴스를 참조할 수 없습니다. 따라서 필드 이니셜라이저 내에서 간단한 이름을 통해 인스턴스 멤버를 직접 참조하는 것은 금지됩니다.
요약:
"필드 이니셜라이저는 비정적 필드를 참조할 수 없습니다"를 방지하려면 , 메서드 또는 속성" 오류가 발생하는 경우 필드 이니셜라이저의 제한 사항을 이해하고 생성자 초기화 또는 지역 변수 사용과 같은 적절한 대체 접근 방식을 사용하는 것이 중요합니다. 이러한 대안을 사용하면 클래스의 인스턴스 멤버를 적절하게 초기화할 수 있습니다.
위 내용은 C# 필드 이니셜라이저에서 비정적 멤버를 참조할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!