의 우리는 다음과 같은 클래스를 가지고, 가정하자 :필드를 읽기 전용으로 유지하는 방법은 무엇입니까?
class C
{
private readonly DataType data;
private readonly AdditionalType additional;
C(DataType newData)
{
data = newData;
// LONG code evaluating additional
}
C(OtherType newData)
{
// eval data from newData
// the same LONG code evaluating additional
}
}
모두 data
및 additional
코드 냄새가있다, 그러나 C의 전체 인생을 그대로 유지 : 섹션이 모두 생성자에 두 배가됩니다 additional
을 평가.
class C
{
private readonly DataType data;
private readonly AdditionalType additional;
private void EvalAdditional()
{
// LONG code evaluating additional
}
C(DataType newData)
{
data = newData;
EvalAdditional();
}
C(OtherType newData)
{
// eval data from newData
EvalAdditional();
}
}
그러나 (이 ctor에 초기화되지 beacuse)를 추가로 더 이상 읽기 전용 수 없다 : 자연 선택은 다른 방법에 압축을 해제 한 후입니다.
이 문제를 어떻게 우아하게 해결할 수 있습니까?
'additional'의 평가는 생성자 인수에 의존합니까? 그렇지 않다면 평가를 다른 개인 생성자로 옮기고 공용 생성자에서 평가를 호출하면됩니다. – Lee
* ... // LONG code ... * 생성자에서 아무 것도 평가하는 것은 그 자체로 코드 냄새입니다. MSDN에서 : 생성자는 생성자 매개 변수를 캡처하는 것 이외의 많은 작업을해서는 안됩니다. 다른 처리 비용은 필요할 때까지 지연되어야합니다. – inquisitive