Наследовать абстрактный класс внутри другого абстрактного класса с теми же именами функций

У меня есть два абстрактных класса AbstractClass1 и AbstractClass2, оба из которых должны иметь одинаковые имена методов Meth1.

А что, если мой AbstractClass1 наследуется от AbstractClass2. В настоящее время он выдает мне ошибку времени компиляции как "Hides Inherited Abstract Member". Ниже мой код.

 abstract class AbstractClass1 : AbstractClass2
 {
    public abstract string Meth1();
 }

 abstract class AbstractClass2
 {
    public abstract string Meth1();
 }

c#
person Rahul    schedule 06.07.2015    source источник
comment
поскольку оба метода являются абстрактными, нет причин для объявления new в вашем AbstractClass1 вообще - что вы действительно пытаетесь сделать?   -  person Random Dev    schedule 06.07.2015
comment
Если AbstractClass1 расширяет AbstractClass2, зачем вам снова объявлять метод?   -  person Glorfindel    schedule 06.07.2015
comment
вы можете переопределить Meth1() в AbstractClass1. Но зачем вам такое объявление?   -  person Joseph    schedule 06.07.2015
comment
зачем вам это ?   -  person farid bekran    schedule 06.07.2015
comment
Привет, это не сценарий в реальном времени Карстен, Глорфиндель, Джозеф и Фарид. Я просто делал это для своих исследований и разработок, как меня спросили об этом в моих недавних интервью. Большое спасибо за ваши ответы :)   -  person Rahul    schedule 06.07.2015


Ответы (2)


Вы можете использовать abstract override в методе производного класса, чтобы избежать ошибки времени компиляции.

abstract class BaseAbstract
{
    public abstract string Meth1();
}

abstract class ChildAbstract : BaseAbstract
{
    public abstract override string Meth1();
}

НО обратите внимание, это не совсем правильное место для использования abstract override. Обычно абстрактное переопределение используется при создании абстрактного класса из неабстрактного класса. чтобы убедиться, что производный класс реализует метод. (см. это)

Взгляните на код ниже

class BaseNonAbstract
{
      public virtual string Meth1()
      {
         // do something
         return string.Empty;
      }
}
abstract class ChildAbstract : BaseNonAbstract
{
    public abstract override string Meth1();
}
person farid bekran    schedule 06.07.2015

Попробуй это

abstract class AbstractClass1 : AbstractClass2
{
}


abstract class AbstractClass2
{
    public abstract string Meth1();
}
person Jon Brian Skog    schedule 06.07.2015