동료에 따르면 적어도 이상한 습관이 있습니다. 우리는 작은 프로젝트를 함께 진행하고 있습니다. 내가 수업을 쓴 방법은 (단순화 된 예)입니다.
[Serializable()]
public class Foo
{
public Foo()
{ }
private Bar _bar;
public Bar Bar
{
get
{
if (_bar == null)
_bar = new Bar();
return _bar;
}
set { _bar = value; }
}
}
따라서 기본적으로 getter가 호출되고 필드가 여전히 null 일 때만 필드를 초기화합니다. 어디서나 사용되지 않는 속성을 초기화하지 않으면 과부하가 줄어 듭니다.
ETA : 내가 한 이유는 내 클래스에 다른 클래스의 인스턴스를 반환하는 여러 속성이 있기 때문에 더 많은 클래스가있는 속성도 있습니다. 최상위 클래스의 생성자를 호출하면 나중에이 클래스가 아닌 모든 클래스의 모든 생성자를 호출합니다. 항상 필요한 아니지만 모든 합니다.
개인적 취향 외에이 관행에 대한 반대 의견이 있습니까?
업데이트 : 나는이 질문에 관해 많은 다른 의견을 고려했으며 받아 들인 대답을 기다릴 것입니다. 그러나 이제는 개념에 대해 훨씬 더 잘 이해하게되었으며 사용시기와 사용하지 않을시기를 결정할 수 있습니다.
단점 :
- 스레드 안전 문제
- 전달 된 값이 null 일 때 "세터"요청을 따르지 않음
- 마이크로 최적화
- 예외 처리는 생성자에서 발생해야합니다
- 클래스 코드에서 null을 확인해야합니다.
장점 :
- 마이크로 최적화
- 속성은 null을 반환하지 않습니다
- "무거운"오브젝트로드 지연 또는 방지
대부분의 단점은 현재 라이브러리에 적용 할 수 없지만 "마이크로 최적화"가 실제로 어떤 것을 최적화하고 있는지 테스트해야합니다.
마지막 업데이트:
좋아, 나는 대답을 바꿨다. 내 원래의 질문은 이것이 좋은 습관인지 아닌지였습니다. 그리고 나는 그것이 아니라고 확신합니다. 어쩌면 나는 현재 코드의 일부 부분에서 여전히 사용하지만 무조건적이고 확실하지는 않습니다. 그래서 나는 습관을 잃고 그것을 사용하기 전에 그것에 대해 생각할 것입니다. 모두 감사합니다!