@pmatveev

Наследование в C#: изменение возвращаемого типа — как исправить ошибку?

abstract class ALauncher
   {
       protected abstract Object parseArgs(string[] args);
   }

   class Launcher : ALauncher
   {
       protected override ABitFileManager parseArgs(string[] args) {...}
   }


Почему возникает ошибка наследования? Ведь ABitFileManager является наследником Object (как и любой другой класс)?
  • Вопрос задан
  • 2653 просмотра
Решения вопроса 1
C# не поддерживает return type covariance.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Nirvano
@Nirvano
Обобщения могут вам, наверно, помочь.

interface ILauncher
  {
    object ParseArgs(string[] args);
  }

  abstract class ALanucher<T> : ILauncher
  {
    protected abstract T ParseArgs(string[] args);

    object ILanucher.ParseArgs(string[] args)
    {
      return ParseArgs(args);
    }
  }

  class Launcher : ALanucher<int>
  {
    protected override int ParseArgs(string[] args)
    {
      throw new NotImplementedException();
    }
  }
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы