Получите Abstact Property - PullRequest
       9

Получите Abstact Property

0 голосов
/ 12 февраля 2019

У меня есть базовый класс с абстрактным свойством:

public class BottomClass {
  public abstract string Name {get;set;}
}

Теперь у меня есть класс, который наследуется от этого:

public class MiddleClass:BottomClass {
  public override string Name {get;set;}
}

, что я сейчас хочу, это то, что "MiddleClass "сам определяет это свойство как абстрактное, так что класс, производный от него, будет вынужден реализовать это свойство.Следующий код не работает таким образом:

public class MiddleClass:BottomClass {
  public abstract override string Name {get;set;} // Not possible that way
}

public class TopClass:MiddleClass {
  public override string Name {get;set;} ="tothetop";
}

Есть ли способ добиться того, чего я хочу?

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Бросайте исключения, если у вас есть причины не делать класс абстрактным.

public class MiddleClass:BottomClass
{
    public override string Name
    {
        get => throw new NotImplementedException();
        set => throw new NotImplementedException();
    }
}
0 голосов
/ 12 февраля 2019

Если вы определяете свойство как абстрактное, вы должны реализовать его в каком-то неабстрактном классе.Таким образом, единственный возможный способ иметь свойство в обоих классах -

public abstract class BottomClass
{
    public abstract string NameB { get; set; }
}

public abstract class MiddleClass : BottomClass
{
    public abstract string NameM { get; set; } 
}

public class TopClass : MiddleClass {
    public override string NameB { get; set; }
    public override string NameM { get; set; }
}

Насколько я понимаю, ваше намерение состоит в том, чтобы иметь свойство Name в MiddleClass.

Или не делатьt реализовать это, как прокомментировал Дэмиен выше.

...