В C # класс, реализующий интерфейс, требуется для определения всех членов этого интерфейса. В случае абстрактного класса вы просто определяете эти члены с помощью ключевого слова abstract
:
interface IFoo
{
void Bar();
}
abstract class Foo : IFoo
{
public abstract void Bar();
}
Или, говоря иначе: вы не должны "реализовать" это (что было бы ужасным ограничением для абстрактных классов); однако в C # вы должны сообщить компилятору , что вы сознательно передаете деньги конкретным подклассам - и приведенная выше строка кода показывает, как это сделать.
В комментариях и жалобах, которые жалуются, что это не ответ на вопрос, не хватает смысла. Кто-то, приходящий в Stack Overflow, получив эту ошибку компилятора, но имея абстрактный класс, в котором было бы ошибочно указывать реализацию, застрял без хорошего решения - ему пришлось бы писать методы реализации, которые вызывали исключения во время выполнения - ужасная работа Вокруг - пока они не имеют вышеуказанную информацию. Хорошо это или плохо, что C # требует этой явности, выходит за рамки переполнения стека и не имеет отношения ни к вопросу, ни к этому ответу.