2012-02-13 60 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是一種業務類型,那麼繼承將是一個可能的解決方案。在這種情況下,您不需要業務屬性,該對象本身就是一個業務並具有其所有屬性。保險公司和商業不是兩個不同的例子,它們是一個。