2012-11-26 3 views
0

모든 개인 및 공용 특성 및 메서드는 부모 클래스의 자식 클래스로 상속되므로 생성자 및 소멸자가 자식 클래스로 상속되는 이유는 무엇입니까?개발자는 어떤 시나리오에서 부모 클래스의 생성자와 소멸자를 자식 클래스로 상속해야합니까?

실재 scnario가 있습니까?

+1

일부 언어에서는 이러한 방법을 상속하는 것이 불가능합니다. – Oded

+0

왜 그런가요? 그리고 그들에게 이름을 지어 줄 수 있니? 나는 그것을 더 보길 좋아한다. –

+0

C# for one. 생성자와 소멸자는 선언 한 유형에 속하므로 상속 할 수 없습니다 (C#에서는 생성자를 체인화 할 수 있지만 상속하지는 않음). – Oded

답변

1

대부분의 프로그래밍 언어 생성자와 생성자에서 은 자동으로을 상속받지 않습니다. 일반적으로 기본 클래스는 하나의 생성자 집합을 제공 할 수 있으며 자식 클래스는 다른 생성자 집합을 제공 할 수 있습니다.

나는 대부분의 경우에 추상적 인 파생 클래스 (즉, 기본 클래스의 생성자를 "상속") 할 기본 클래스로 생성자의 동일한 세트를 제공해야한다고 생각하지만, 구체적인 파생 클래스는 기본 클래스의 생성자 인자의 일부를 해결할 수 있습니다 더 유용한 생성자 세트를 제공하십시오.

다음 사례를 고려하십시오. 우리는 엔드 포인트의 이름과 같은 문자열이 필요 BaseWCFProxy라는 기본 클래스가 있다고 가정하자

abstract class BaseWCFProxy 
{ 
    public BaseWCFProxy(string endpointName) 
    {} 
} 

class ConcreteProxy : BaseWCFProxy 
{ 
    public ConcreteProxy() : base("ConcreteProxyEndPoint") {} 
} 

을하지만 당신은 당신이 기본 클래스로 생성자의 동일한 세트를 제공하는 것보다 BaseProxy 및 ConcreteProxy 사이에 추가 추상 클래스를 추가하기로 결정 :

클래스 DualChannelBaseProxy : BaseWCFProxy { 공공 DualChannelBaseProxy (문자열 enpointName) : 기본 (endpointName) {} }

그래서 엄지 손가락의 규칙은 다음과 같습니다 당신이 추상적 인 아이를 작성하는 경우 당신은에서 "를 고려해야한다 herit "모든 기본 클래스 생성자. 구체적인 자식을 작성하면 클라이언트에 적합한 별도의 생성자 집합을 제공 할 수 있습니다.

P. 소멸자에 과부화 같은 개념이 없으므로 우리는 소멸자와 동일한 문제가 없습니다. 그리고 그것들은 기본적으로 상속됩니다. 즉, 자손은 몇 가지 추가 논리를 제공 할 수 있지만 확실히 기본 버전을 호출해야합니다.

관련 문제