C# наследование обман с иерархией

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

Мне нужно, чтобы производный класс мог показывать свойство 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

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

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

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

  • Район -> Имя, DistrictId, ConferenceId, ConferenceName, JurisdictionId, JurisidictionName
  • Конференция -> Имя, ConferenceId, JurisdictionId, JurisdictionName
  • Юрисдикция -> Имя, Юрисдикция Id

1 ответ

Решение

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

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

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

 public class District : Conference
    {
       public virtual string ConferenceName {get;set;}
       public virtual string DistrictId {get;set;}
    }
Другие вопросы по тегам