저는 상속을 가장 효과적으로 구성하는 방법에 대해 약간의 조언을 한 후에 있습니다. 나는 대부분을 사용해야하는 클래스 (아래), 그리고 기본 ExportData 클래스의 일부 클래스 오버라이드 (override)하는 :기본 클래스 생성자를 호출하지 않는 방법
public class ExtendedExportData : ExportData
{
private tData _Data;
private ResStrings _diaStrings;
public ExtendedExportData(tData Data, ResStrings diaStrings)
: base(tData, diaStrings)
{
_tData = Data;
_diaStrings = diaStrings;
}
}
이 경우 neccesary없는 무엇으로 기본 생성자를 호출 할 필요가있다 위의 클래스에서 사용 된 기본 클래스 메서드 중 어느 것도 초기화를 필요로하지 않으므로 다른 (자세한) 용도로 직접 기본 클래스의 인스턴스를 만들 때만 생성자가 필요합니다.
기본 생성자를 제거하면 하위 생성자에서 기본 생성자가 0 인수를 사용하지 않는다는 오류가 발생합니다. 어떻게 이것을 피할 수 있습니까? 사전에
public class ExportData
{
private tData _Data;
private ResStrings _diaStrings;
public ExportLines(tData Data, ResStrings diaStrings)
{
_Data = Data;
_diaStrings = diaStrings;
}
}
감사 :
다음은 기본 클래스입니다. 단지 생성자 base()
즉
public ExtendedExportData(tData Data, ResStrings diaStrings)
: base()
기본 클래스를 보여주십시오 'ExportData' 그냥 * * 기본 클래스의 인스턴스를 인스턴스화 않습니다 그것에 –
코드를 기본 생성자를 추가합니다. 이것이 상속이 의미하는 것입니다.'ExtendedExportData'*는'ExportData'의 인스턴스입니다. 만약'ExportData'가'ExtendedExportData'에 대해 의미가없는 필드를 가지고 있다면 당신은 디자인 버그가 있습니다 –
ExportData 클래스에서 빈 protected 생성자를 생성 한 다음 ExtendedExportData (: base())에서 호출 할 수 있습니다. – Evk