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