我有以下类( POCO的?),其中第二个应该扩展第一个。
我猜我需要一个引用基本实例的属性,在这种情况下是Business,但是我还需要一个构造函数来“填充”该属性,因为保险公司在没有业务的情况下不能存在吗?
我对此的参考是tblInsuranceCompany
对BusinessID
列的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);
}
}
答案 0 :(得分:5)
我猜我需要一个引用基本实例的属性,在这种情况下为Business,
不,你不需要这个。 InsuranceCompany 是业务。它还具有Business
的所有属性,因为它继承自Business
。您不需要属性来引用它,因为对InsuranceCompany
对象的引用与对“business”部分的引用相同(它们是同一个对象)。
但是我还需要一个构造函数来“填充”该属性,因为如果没有业务,保险公司就不能存在吗?
所有类都获得构造函数 - 当您构建InsuranceCompany时,它也将有效地构建“业务”。
话虽这么说,您可能需要一个将相关信息传递给基类构造函数的构造函数 - 但如果您不提供,则编译器将为您创建一个默认构造函数。
答案 1 :(得分:1)
我不太确定,如果你在这里混淆继承与组合。
如果InsuranceCompany是一种业务,那么继承将是一种可能的解决方案。在这种情况下,您不需要Business属性,该对象本身就是一个业务,并具有其所有属性。 InsuranceCompany和Business不是两个不同的实例,它们是一个。
答案 2 :(得分:0)
您可以在InsuranceCompany中使用Name
属性(或base.Name
),并从派生类中删除Business属性。