c#继承技巧与层次结构

时间:2011-11-08 02:01:06

标签: c# nhibernate inheritance member-hiding

我有一个组织的组织。基本上,它们都有一个共同的基础,然后每个类都会声明一个名称和id。每个派生类都会获取以前的名称和ID。

我需要派生类能够显示继承类的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;}
    }

我需要..

  • 要返回Conference.Name
  • 的District.ConferenceName
  • Conference.JurisdictionName返回Jurisdiction.Name

我谷歌搜索并堆栈溢出,无法找到答案..感谢您的帮助

为清晰起见编辑:

我需要这些类看起来像这样。

  • 区 - >姓名,DistrictId,ConferenceId,ConferenceName,JurisdictionId,JurisidictionName
  • 会议 - >名称,ConferenceId,JurisdictionId,JurisdictionName
  • 司法管辖权 - >姓名,JurisdictionId

1 个答案:

答案 0 :(得分:1)

我相信你的问题是你可能会对继承如何工作感到困惑。用于标识ConferenceName的Name属性将与District的名称相同。

您需要一个类结构,您可以在区域中包含Conference类的实例,或者将ConferenceName复制到区域的属性中而不引用基础。

更新以反映评论讨论:

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