2015-02-06 5 views
0

myObject에서 BaseClass를 가져 오는 쉬운 클래스 디자인이 있습니다.상속 된 클래스의 매개 변수를 사용하는 모범 사례 생성자

public abstract class BaseClass 
{ 
    public BaseClass(myObject parameter) 
    { 
     // ... 
    } 
} 

public class ChildClass : BaseClass 
{ 

} 

이제 내 문제는 공개 BaseClass에서 상속하여 내 프로그램을 확장 가능하게 만들고 싶습니다. 따라서 생성자를 만들 수 있습니다. 실패로 이어질 생성자를 만들 수 있습니다.

public ChildClass() :base(new myObject()){...} 

자신의 생성자로 상속 된 클래스를 방지 할 수 있습니까? 실제로 ChildClass의 생성자는 전혀 피하기를 원합니다. 이것이 가능한가? 그런 다음 팩토리를 사용하여 Initialize 메서드를 제공 할 수 있습니다. 아니면 무언가 불가능한 것입니다. 코드를 알고 있어야합니다.

+0

생성자가 상속되지 않으며 _must_ 클래스에 생성자가 있습니다. 생성자를 정의하지 않으면 매개 변수없는 생성자가 내포됩니다. 정확히 어떤 상황을 피하려고합니까? –

+0

작성자가 작성되지 못하도록 할 수있는 방법은 없습니다. 물론 팩토리 패턴을 사용하고 전용 생성자 만 만들고 일부 IInitializable 인터페이스 또는 뭔가를 구현하는 데 동의 할 수 있습니다. – ryanyuyu

+0

좋아, 이제 그들은 생성자가 있어야하지만, 특정 매개 변수가있는 생성자 하나만 허용하고 싶습니다. 구조체가 매개 변수없는 생성자를 허용하지 않았습니다. – Matt

답변

3

클래스는 자체 생성자에 대해 전적으로 책임이 있습니다. 그들은 계승되지 않으며, 모든 클래스 에 생성자가 있어야합니다. 아니, 기본 클래스가 가질 수 있거나 가질 수없는 생성자를 "제어"하기 위해 할 수있는 방법은 없습니다.

+0

감사합니다. 그런 다음 클래스에 금지 된 생성자가 있는지 확인하고 오류를 던질 것입니다. – Matt

+0

"금지 된"생성자는 무엇이겠습니까? 단지 당신이 피하려고하는 상황이 궁금합니다. –

+1

@Matt 코드 호출자를 신뢰할 수 없다면 잘못된 것이 있습니다. 존재해서는 안되는 문제를 해결하려고하는 것 같습니다. –

관련 문제