>백엔드 개발 >C++ >다른 비정적 필드를 사용하여 클래스 필드를 초기화할 수 없는 이유는 무엇입니까?

다른 비정적 필드를 사용하여 클래스 필드를 초기화할 수 없는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2025-01-01 10:48:10374검색

Why Can't I Initialize a Class Field Using Another Non-Static Field?

클래스 인스턴스의 필드 초기화 이해

클래스를 디자인할 때 필드, 특히 비정적 필드를 적절한 값으로 초기화하는 것이 중요합니다. "필드 이니셜라이저는 비정적 필드, 메서드 또는 속성을 참조할 수 없습니다."라는 오류 메시지는 비정적 클래스 멤버에 직접 액세스하여 클래스 내의 인스턴스 변수를 초기화하려고 할 때 발생합니다.

In 특정 경우 Service 클래스에는 DinnerRepository 클래스의 인스턴스와 검색된 Dinner 개체의 후속 할당으로 초기화된 필드가 포함되어 있습니다. 그러나 이 접근 방식은 앞서 언급한 오류로 이어집니다.

필드 초기화에 대한 대체 솔루션

필드 초기화에 대한 한 가지 대안은 인스턴스 생성자를 사용하여 인스턴스 값을 설정하는 것입니다. Service 클래스에서 생성자를 선언하고 그 안에 있는 DinnerRepository 및 Dinner 필드를 초기화하면 서비스 인스턴스가 생성될 때만 필드를 초기화할 수 있습니다.

public class Service
{
    private readonly DinnerRepository repo;
    private readonly Dinner dinner;

    public Service()
    {
        repo = new DinnerRepository();
        dinner = repo.GetDinner(5);
    }
}

이 시나리오에서 필드는 개체 중에 초기화됩니다. 인스턴스화를 통해 서비스 인스턴스가 애플리케이션에서 사용되기 전에 완전히 설정되었는지 확인합니다.

또 다른 옵션은 메서드와 속성 내의 필드를 느리게 초기화하는 것입니다. 생성자에서 필드를 초기화하는 대신 필요할 때 값을 검색하는 메서드나 속성을 만들 수 있습니다. 이 접근 방식을 사용하면 필드가 데이터로 채워지는 시기와 방법을 더 효과적으로 제어할 수 있습니다.

이러한 지침을 따르면 클래스 인스턴스 내의 비정적 필드를 효과적으로 초기화하여 "필드 이니셜라이저는 비정적 필드를 참조할 수 없습니다"라는 오류를 방지할 수 있습니다. -정적 필드, 메서드 또는 속성."

위 내용은 다른 비정적 필드를 사용하여 클래스 필드를 초기화할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.