2012-02-13 8 views
3

私は次のクラスを持っています(POCO's?)。継承を持つコンストラクタが必要ですか?

私は、基本インスタンス、この場合はビジネスを参照するプロパティが必要であると推測していますが、保険会社がビジネスなしで存在できないため、そのプロパティを "埋める"コンストラクタも必要ですか?

これは私の参考文献です。tblInsuranceCompanyBusinessIDに戻るtblBusinessにFK制約があります。

さらに、私は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'」は「ビジネス」または「has-a」「ビジネス」ですか?あなたは両方をしている、それは間違っている。 – SLaks

+0

@SLaks:継承( ':Business')は「is-a」を定義しますが、プロパティ' public business Business'は「has-a」を定義していますか?それが正しいなら、それを明確にしてくれてありがとう。私はあなたが私が何を意味しているか知っている場合、私はそれが "仕事のコード"に適用されたことがない2の違いを知っていた。ありがとう! –

答えて

5

私は、私はベースインスタンスを参照するプロパティを必要と推測し、この場合ではビジネス、

いいえ、あなたはこれを必要としないのです。 InsuranceCompany です。また、Businessから継承されているため、すべてのプロパティがBusinessになります。 InsuranceCompanyオブジェクトへの参照は、 "ビジネス"部分への参照と同じ参照になるため、これを参照するプロパティは必要ありません(同じオブジェクトです)。

しかし、保険会社はビジネスなしでは存在できないため、そのプロパティを「記入する」コンストラクタも必要ですか?

すべてのクラスはコンストラクタを取得します - InsuranceCompanyを構築すると、効果的に "ビジネス"も構築されます。

これは、関連する情報を基本クラスのコンストラクタに渡すコンストラクタが必要な場合がありますが、コンストラクタを提供しない場合、コンパイラはデフォルトのコンストラクタを作成します。

+0

ありがとう、それは意味がありますが、別の質問につながります。これがもはやPOCOではないことを意味するコンストラクタを追加すれば正しいのですか?私は別のクラスを持っていなければなりません、あるいは私は2つを混同しています。 –

+0

@RefractedPaladinあなたはコンストラクタを持つことができ、依然としてPOCOであることができます。通常は、引数を取る引数に加えてデフォルトのコンストラクタを持つのがいいですが... –

+0

ありがとう、ありがとう、 –

0

InsuranceCompanyでNameプロパティ(またはbase.Name)を使用し、派生クラスからビジネスプロパティを削除することができます。

1

あなたがここでの構成で継承を混乱させるなら、私は確信していません。

InsuranceCompanyがビジネスの一種である場合、継承が可能な解決策になります。この場合、ビジネスプロパティは必要ありません。オブジェクト自体はビジネスであり、すべてのプロパティを持ちます。 InsuranceCompanyとBusinessは2つの異なるインスタンスではなく、1つです。

関連する問題