В этом сценарии:
class A
{
class B
{
protected void func() { // do something }
}
}
Вы не можете наследовать от класса A
и переопределить func()
в классе B
.
Из вашего описания кажется, что производный от Aклассы должны иметь возможность переопределять некоторую функцию (или функциональность) во внутреннем классе B
, что указывает на то, что вам, возможно, следует переосмыслить свой дизайн.Либо извлеките B
и не делайте его внутренним классом, либо сделайте так, чтобы функции, которые вы хотите переопределить, явной зависимостью через интерфейс, подобный следующему:
class A
{
private B _MyB;
public A(ISomeBehaviour behaviour)
{
_MyB = new B(behaviour);
}
}
В любом случае, если вы хотите придерживаться своего дизайнатогда я бы не рекомендовал подход с делегатами, а скорее выбрал бы переопределение, потому что с делегатами труднее добавлять декорации, если это все, что вам нужно в ваших дочерних классах.