첫 번째 예제에서는 정적 생성자에서 변경하는 중입니다. 다른 정적 메서드/속성에서 변경 한 경우 컴파일러 오류가 발생합니다.
두 번째 예에서는 비 정적 생성자에서 static readonly
멤버를 변경하려고했으나 허용되지 않습니다.
static
생성자에서 static readonly
멤버 만 변경할 수 있습니다. 이 방법으로 생각하면 static
생성자가 한 번 실행되고 각 인스턴스에 대해 인스턴스 생성자가 호출됩니다. 모든 인스턴스가 변경할 수있는 경우이 속성은 매우 readonly
이 아닙니다.
당신은 물론, 생성자에서 비 static
readonly
인스턴스 멤버를 변경할 수 있습니다
public static readonly bool MaximumRecipientsReached = false;
public readonly bool MyInstanceReadonly = false;
static AdditionalRecipient()
{
// static readonly can only be altered in static constructor
MaximumRecipientsReached = true;
}
public AdditionalRecipient()
{
// instance readonly can be altered in instance constructor
MyInstanceReadonly = true;
}
는 또한, 당신에 의해 혼란 스러워요 "PS : 나는 속성을 사용하고 물론". 속성을 readonly
으로 선언 할 수 없으며, 속성이 readonly
-ish가되도록하려면 private set
으로 지정해야합니다. 물론 백킹 필드를 사용하는 경우는 예외입니다. 이 설정을하는 주된 이유는 private 세트가있는 속성을 사용하면 클래스 자체가 모든 메서드 나 생성자에서 속성 (정적 또는 인스턴스)을 변경할 수 있으므로 코드에서 수행하려는 작업을 수행 할 수 있기 때문입니다. 수업 외부에서는 할 수 없습니다.
// public getters, private setters...
public static bool MaximumRecipientsReached { get; private set; }
public static IList<EmailAddress> Contacts { get; private set; }
오류 메시지는 무엇입니까? – Servy