2012-02-13 3 views
3

나는 두 번째 클래스가 첫 번째 클래스를 확장한다고 가정하면 클래스 (POCO?)에 대해 다음과 같은 클래스가 있습니다.상속이있는 생성자가 필요합니까?

기본 인스턴스 인 비즈니스를이 경우 참조하는 속성이 필요 하겠지만 보험 회사는 비즈니스 없이는 존재할 수 없으므로 해당 속성을 "채우기"위해 생성자가 필요합니까?

내 참조는 tblInsuranceCompanyBusinessIDtblBusiness의 FK 제약 조건이있는 기본 DB입니다.

또한 OOP에서 매우 새로 생겼으므로 "잘못된"것으로 보이는 점을 지적하십시오. 감사합니다,

public class Business 
{ 
    public int BusinessID { get; set; } 

    public BusinessType BusinessType { get; set; } 

    public string Name { get; set; } 

    public string ContactName { get; set; } 

    public string EmailAddress { get; set; } 

    public DateTime? InactiveDate { get; set; } 

    public IList<Address> Addresses { get; set; } 

    public IList<Phone> Phones { get; set; } 

    public string DisplayString { get { return this.ToString(); } } 

    public override string ToString() 
    { 
     return String.Format("{0}: {1}", Name, BusinessType.TypeDescription); 
    } 
} 

public class InsuranceCompany : Business 
{ 
    public int InsuranceCompanyID { get; set; } 

    public Business Business { get; set; } 

    public InsuranceCompanyType InsuranceCompanyType { get; set; } 

    public string DRIInsuranceCompanyNumber { get; set; } 

    public string DisplayString { get { return this.ToString(); } } 

    public override string ToString() 
    { 
     return String.Format("{0}: {1}", Business.Name, InsuranceCompanyType.TypeDescription); 
    } 
} 
+6

'InsuranceCompany' is is "a" "사업"또는 "has-a" "사업"입니까? 너는 둘 다하고있어. 그건 틀렸다. – SLaks

+0

@SLaks : 상속 (': Business')은 "is-a"를 정의하지만 'Public Business Business'속성은 "has-a"를 정의합니다. 그 말이 맞다면 나에게 그것을 분명히 해줘서 고마워. 나는 당신이 내가 무엇을 의미하는지 안다면 "work code"에 적용된 적이 없었던 것의 차이를 알았다. 감사! –

답변

5

나는

아니, 당신이 필요하지 않습니다, 나는이 경우 기본 인스턴스 비즈니스를 참조하는 속성을 필요로 추측하고있다. InsuranceCompany 입니다. 또한 Business에서 상속되므로 모든 속성이 Business입니다. InsuranceCompany 개체에 대한 참조가 "비즈니스"부분에 대한 참조와 동일한 참조 (동일한 개체)이므로이 참조를위한 속성이 필요하지 않습니다.

하지만 보험 회사가 사업 없이는 존재할 수 없기 때문에 해당 속성을 "채우기"위해 생성자가 필요합니까?

모든 클래스는 생성자를 얻습니다. InsuranceCompany를 구성하면 효과적으로 "비즈니스"도 구성됩니다.

그렇다면 관련 정보를 기본 클래스 생성자에 전달하는 생성자가 필요할 수 있습니다. 그러나 제공하지 않으면 컴파일러에서 기본 생성자를 만듭니다.

+0

고마워, 그게 합리적이긴하지만 또 다른 질문으로 연결된다. 더 이상 POCO가 아니라는 것을 의미하는 Constructor를 추가한다면, 맞습니까? 그때 다른 수업을해야하거나 그 두 가지를 혼란스럽게해야합니다. –

+0

@RefractedPaladin 생성자를 가질 수 있으며 여전히 POCO가 될 수 있습니다. 일반적으로 사용하는 인수에 따라 인수를 취하는 것 외에 기본 생성자를 갖는 것이 좋지만 ... –

+0

고맙게 여기고 제 고유의 질문에 답해 주셔서 감사합니다. –

0

InsuranceCompany에서 Name 속성 (또는 base.Name)을 사용하고 파생 클래스에서 비즈니스 속성을 제거하면됩니다.

1

당신이 여기에서 작곡을 통한 상속을 혼란스럽게한다면, 나는 확실히 모르겠습니다.

InsuranceCompany가 비즈니스 유형 인 경우 상속이 가능한 해결책이 될 수 있습니다. 이 경우 비즈니스 속성은 필요 없으며 객체 자체는 비즈니스이고 모든 속성이 있습니다. InsuranceCompany와 Business는 두 가지 다른 경우가 아니며 하나입니다.

관련 문제