W języku C # klasa implementująca interfejs jest wymagana do zdefiniowania wszystkich członków tego interfejsu. W przypadku klasy abstrakcyjnej wystarczy zdefiniować te elementy za pomocą abstract
słowa kluczowego:
interface IFoo
{
void Bar();
}
abstract class Foo : IFoo
{
public abstract void Bar();
}
Albo inaczej: nie musisz tego „implementować” (co byłoby okropnym ograniczeniem klas abstrakcyjnych); jednak w C # musisz powiedzieć kompilatorowi , że celowo przekazujesz złotówkę konkretnym podklasom - a powyższy wiersz kodu pokazuje, jak to zrobić.
Komentarze i głosy przeciw, narzekające, że nie jest to odpowiedź na pytanie, nie mają sensu. Ktoś, kto przychodzi do Stack Overflow, otrzymawszy ten błąd kompilatora, ale mając klasę abstrakcyjną, w której dostarczenie implementacji byłoby błędem, utknął bez dobrego rozwiązania - musiałby napisać metody implementacji, które rzucałyby wyjątki w czasie wykonywania, horrendalna praca -okoła - dopóki nie uzyskają powyższych informacji. Czy to dobrze, czy źle, że C # wymaga tej jawności, znajduje się poza zakresem przepełnienia stosu i nie ma znaczenia dla pytania ani tej odpowiedzi.