2011-11-08 6 views
0

私は組織のヒラリーを持っています。基本的に、それらはすべて共通の基盤を共有し、各クラスは名前とIDを宣言します。すべての派生クラスは以前の名前とIDを取得します。ヒエラキーのC#継承トリッキー

継承されたクラスのNameプロパティを表示するには、派生クラスが必要です。私はgetアクセサーでbase.Nameを使用しようとしています。機能していないようです。

私はNHibernateを使用しているので、プロパティは仮想でなければなりません。これは問題の可能性があります。

"new"を使用してNameプロパティを "非表示"しようとしましたが、base.Nameが新しいバージョンだと思います。

hiearchyは

public class Base 
    { 
     public virtual string Name {get;set;} 
     public virtual string Website {get;set;} 
    } 
    public class Jurisdiction : Base 
    { 
     public virtual string JurisdictionId {get;set;} 
    } 
    public class Conference : Jurisdiction 
    { 
     public virtual string JurisdictionName {get{ return base.Name; }} 
     public virtual string ConferenceId {get;set;} 
    } 
    public class District : Conference 
    { 
     public virtual string ConferenceName {get {return base.Name; }} 
     public virtual string DistrictId {get;set;} 
    } 

私が必要..

  • District.ConferenceName Jurisdiction.Name
  • を返すためにConference.Name
  • Conference.JurisdictionNameを返すために...このようになります

私はグーグルとstackoverflowedと答えを見つけることができません..ありがとう明確にするための助け

EDITのために:

私はこのように見えるようにするためのクラスを必要としています。

  • 地区 - >名前、DistrictId、ConferenceId、ConferenceName、JurisdictionId、JurisidictionName
  • 会議 - >名前、ConferenceId、JurisdictionId、JurisdictionName
  • 管轄 - >名前、JurisdictionId
+0

あなたの質問を明確にしてください。私にとっては、新しい別名を返す会議の名前プロパティを上書きする必要があるようですが、それは単純なようです。 – Polity

答えて

1

私は信じていますあなたの問題は、継承がどのように働いているのか混乱するかもしれないということです。 ConferenceNameを識別するために使用しているNameプロパティは、Districtの名前と同じになります。

DistrictにConferenceクラスのインスタンスを含めるか、ConferenceNameをBaseを参照せずにDistrictのプロパティにコピーするクラス構造が必要です。

更新コメントの議論を反映する:

public class District : Conference 
    { 
     public virtual string ConferenceName {get;set;} 
     public virtual string DistrictId {get;set;} 
    } 
+0

これは、CRMデータベースから当社のWebサイト用の正面DBを作成するという奇妙な状況です。テーブルを「平坦化」し、データを1日を通して頻繁に抽出します。インスタンスを持つことはできますが、私はそれをしたくありません。どのように私はプロパティをコピーすることができますか? – Brandon

+0

ConferenceNameが基本のNameプロパティを参照するのではなく、ストレートgetter/setter(つまり、パブリック仮想文字列ConferenceName {get; set;})に変更します。 –

+0

会議テーブルには名前列がありますが、会議名が地区テーブルで使用されている場合は会議名です。これを達成する方法があると思われます。 – Brandon