我需要一个具有继承的构造函数吗?

时间:2012-02-13 20:27:29

标签: c# .net oop inheritance

我有以下类( POCO的?),其中第二个应该扩展第一个。

我猜我需要一个引用基本实例的属性,在这种情况下是Business,但是我还需要一个构造函数来“填充”该属性,因为保险公司在没有业务的情况下不能存在吗?

我对此的参考是tblInsuranceCompanyBusinessID列的FK约束返回tblBusiness的基础数据库。

另外,我是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);
    }
}

3 个答案:

答案 0 :(得分:5)

  

我猜我需要一个引用基本实例的属性,在这种情况下为Business,

不,你不需要这个。 InsuranceCompany 业务。它还具有Business的所有属性,因为它继承自Business。您不需要属性来引用它,因为对InsuranceCompany对象的引用与对“business”部分的引用相同(它们是同一个对象)。

  

但是我还需要一个构造函数来“填充”该属性,因为如果没有业务,保险公司就不能存在吗?

所有类都获得构造函数 - 当您构建InsuranceCompany时,它也将有效地构建“业务”。

话虽这么说,您可能需要一个将相关信息传递给基类构造函数的构造函数 - 但如果您不提供,则编译器将为您创建一个默认构造函数。

答案 1 :(得分:1)

我不太确定,如果你在这里混淆继承与组合。

如果InsuranceCompany是一种业务,那么继承将是一种可能的解决方案。在这种情况下,您不需要Business属性,该对象本身就是一个业务,并具有其所有属性。 InsuranceCompany和Business不是两个不同的实例,它们是一个。

答案 2 :(得分:0)

您可以在InsuranceCompany中使用Name属性(或base.Name),并从派生类中删除Business属性。