하위 클래스가 선언하지 않고 사용할 수 있도록 기본 클래스에서 생성자를 선언하는 방법은 무엇입니까?
-
28-10-2019 - |
문제
하위 클래스가 부모의 생성자를 사용하고 싶습니다.그러나 그것이 작동하기 위해서는 항상 하위 클래스에서 다시 정의해야 할 것 같습니다. 라코 디스
그래서 부모 클래스에서 생성자를 제대로 선언하지 않았는지, 아니면 직접 생성자 상속이 전혀 없는지 궁금합니다.
해결책
당신은 잘못한 것이 없습니다.
C #에서 인스턴스 생성자는 상속되지 않으므로 상속 유형에서 선언하고 기본 생성자에 연결하는 것이 올바른 방법입니다.
사양 §1.6.7.1에서 : <인용구>
다른 멤버와 달리 인스턴스 생성자는 상속되지 않으며 클래스에는 클래스에서 실제로 선언 된 것 외에 다른 인스턴스 생성자가 없습니다.클래스에 인스턴스 생성자가 제공되지 않으면 매개 변수가없는 빈 생성자가 자동으로 제공됩니다.
다른 팁
이 질문이 귀하의 질문에 직접 답변하지 않는다는 것을 알고 있습니다.그러나 대부분의 생성자가 단순히 이전 생성자에 새 매개 변수를 도입하는 경우 선택적 인수 (C # 4에서 도입 됨)를 활용하여 정의해야하는 생성자 수를 줄일 수 있습니다.
예 : 라코 디스
위는 다음과 같이 줄일 수 있습니다. 라코 디스
그리고 여전히 당신이 어떤 수의 인자로도 BaseClass
와 DerivedClass
를 초기화 할 수 있습니다 :
라코 디스
생성자는 기본 클래스에서 파생으로 상속되지 않습니다.각 생성자는 먼저 기본 클래스 ctor를 호출해야합니다.컴파일러는 매개 변수없는 ctor를 호출하는 방법 만 알고 있습니다.베이스 클래스에 그러한 ctor가 없으면 수동으로 호출해야합니다.
그래서 생성자를 올바르게 선언하고 있지 않은지 궁금합니다. 어리석은 것처럼 보이기 때문입니다.
기본 클래스에 기본 생성자가 없으면 자식 클래스에서 다시 선언해야합니다.이것이 .NET에서 OOP가 작동하는 방식입니다.