c # наследование обман с иерархией - PullRequest
0 голосов
/ 08 ноября 2011

У меня есть ряд организаций. По сути, все они имеют общую базу, и тогда каждый класс объявит имя и идентификатор. Каждый производный класс получит предыдущее имя и идентификатор.

Мне нужно, чтобы производный класс мог отображать свойство Name унаследованного класса. Я пытаюсь использовать base.Name в аксессоре get. Не работает.

Я использую NHibernate, поэтому свойства должны быть виртуальными. Это может быть проблемой.

Я пытался «спрятать» свойство Name с помощью «new», но затем я считаю 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 для возврата Conference.Name
  • Conference.JurisdictionName для возврата юрисдикции. Name

Я гуглил и переполнен стеком и не могу найти ответы .. Спасибо за помощь

РЕДАКТИРОВАТЬ для ясности:

Мне нужно, чтобы классы выглядели так.

  • Район -> Имя, идентификатор района, идентификатор конференции, имя конференции, идентификатор юрисдикции, имя юрисдикции
  • Conference -> Имя, ConferenceId, JurisdictionId, JurisdictionName
  • Юрисдикция -> Имя, JurisdictionId

1 Ответ

1 голос
/ 08 ноября 2011

Я полагаю, что ваша проблема в том, что вы можете запутаться в том, как работает наследование.Свойство Name, которое вы используете для идентификации ConferenceName, будет таким же, как и название района.

Вам нужна структура классов, в которой вы либо включаете экземпляр класса Conference в District, либо копируете ConferenceName всобственность Района без ссылки на базу.

Обновление, чтобы отразить обсуждение комментариев:

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