이것은 스핀 오프 this closed question입니다. 응답이 있었지만 응답을하기 전에 닫혔습니다. 다음은 질문의 수정 된 버전입니다.특별한 작업을하지 않는 내부 생성자가있는 이유는 무엇입니까?
클래스에 속성을 설정하는 내부 생성자가있는 이유는 무엇입니까? 이것의 장점을 무엇
public class SomeClass
{
public SomeClass() : this(new SomeOtherClass()) { }
internal SomeClass(SomeOtherClass c) { _someField = c; }
private SomeOtherClass _someField;
protected void SomeMethod() {
var foo = _someField.Bar();
}
}
, 왜 그냥 할 것 :
public class SomeClass
{
public SomeClass() { _someField = new SomeOtherClass(); }
private SomeOtherClass _someField;
protected void SomeMethod() {
var foo = _someField.Bar();
}
}
이 패턴은 * Poor Man 's Dependency Injection *으로도 불리며 전체 안티 패턴입니다. –
어셈블리/라이브러리 내에서 클래스를 특수하게 내부적으로 사용하거나 만들었지 만 제 3자가 소비하는 다른/제한된 방법을 노출하고자 할 때도 사용할 수 있습니다. 이 경우, 아마도'SomeOtherClass'의 기존 인스턴스를 사용할 수있는 내부 팩토리가있을 것입니다. 그러나 제 3자가'SomeClass'를 만들고자한다면 그들은 디폴트 생성자를 사용해야 만하고'SomeOtherClass'의 새로운 인스턴스를 생성하게해야합니다. –