Доступ к защищенным членам родительского класса - C#

Формулировка задачи:

class Base {
    protected int x;
}
 
class Child: Base {
    public void DoSomething(Base b) {
        b.x = 0;
    }
}
Сообщение от SharpDevelop
Доступ к защищенному члену 'Program.Base.x' через квалификатор типа 'Program.Base' невозможен; квалификатор должен иметь тип 'Program.Child' (или производный от него тип) (CS1540)
Скажите, каким образом можно получить доступ к такому члену? Явное приведение вниз (к Child) и объявление как internal не предлагать.

Код к задаче: «Доступ к защищенным членам родительского класса - C#»

textual
class Child : Base
{
    public void DoSomething(Base b)
    {
        b.GetType().GetField("x", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(b, 0);
    }
}

11   голосов, оценка 4.364 из 5


СОХРАНИТЬ ССЫЛКУ