Этот код:
abstract class C
{
protected abstract void F(D d);
}
class D : C
{
protected override void F(D d) { }
void G(C c)
{
c.F(this);
}
}
Генерирует эту ошибку:
Невозможно получить доступ к защищенному члену "C.F(D)" через квалификатор типа "C"; квалификатор должен быть типа "D" (или получен из него)
О чем они думали в мире? (Изменяет ли это правило что-то?) И есть ли способ обойти это, кроме того, что F публично?
Изменить: теперь я получаю причину, почему это (спасибо Грег), но я все еще немного недоумеваю относительно рациональности; Дано:
class E : C
{
protected override void F(D d) { }
}
Почему бы D не иметь возможность называть E.F?
Сообщение об ошибке отредактировано, поэтому я мог бы поставить там опечатку.