2012-02-13 63 views
3

我有以下几门课(POCO's?),其中第二个应该延伸到第一个。我需要一个带继承的构造函数吗?

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

我对此的参考是底层DB,其中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); 
    } 
} 
+6

“保险公司”是“一个”业务“还是”一个“业务”?你们都在做,这是错误的。 – SLaks 2012-02-13 20:29:24

+0

@SLaks:所以继承(':Business')定义了“is-a”,但是“public Business Business”属性定义了“has-a”?如果这是正确的,那么谢谢你为我澄清。如果你知道我的意思,我就知道我从来没有将它应用于“工作代码”的区别。谢谢! – 2012-02-13 20:37:46

回答

5

我猜我需要一个属性参考基本情况,企业在这种情况下,

不,你不需要这个。保险公司的业务。它也将拥有Business的所有属性,因为它从Business继承。您不需要属性来引用它,因为对InsuranceCompany对象的引用将与对“业务”部分的引用具有相同的引用(它们是同一对象)。

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

所有类都获得构造函数 - 构建InsuranceCompany时,它也将有效地构造“业务”。这就是说,你可能需要一个将相关信息传递给基类构造函数的构造函数 - 但是如果你不提供它,编译器会为你创建一个默认构造函数。

+0

谢谢,这是有道理的,但会导致另一个问题,如果我添加一个构造函数,这意味着这不再是一个POCO,正确的?那么我应该再上一节课,否则我会混淆两者。 – 2012-02-13 20:35:53

+0

@RefractedPaladin你可以有一个构造函数,并且仍然是一个POCO - 尽管除了任何带参数的参数之外,通常都有一个默认的构造函数是很好的,这取决于使用场景... – 2012-02-13 20:41:48

+0

感谢和感谢您回答我的问题。 – 2012-02-13 20:44:36

0

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

1

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

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