Доступ к члену базового класса с модификатором protected - C#
Формулировка задачи:
Добрый день!
Читая MSDN наткнулся на статью по ссылке https://msdn.microsoft.com/ru-ru/library/bcd5672a.aspx .
Там описана фраза:
В результате работы программы получил вывод "123".
После этого попытался понять, действительно ли обращение к защищенному члену базового класса возможно только через экземпляр производного класса. В примере сверху это действительно так т.к. член базового класса не является статическим и не может использоваться в статическом методе Main(). Тем не менее, если в примере кода с MSDN вынести метод Main() в отдельный класс, то получить доступ к защищенному объекту родительского класса в не статическом методе можно просто по его имени:
При этом в коде выше можно создать экземпляр объекта класса В, и задать для него собственное значение для защищенной переменной "х". Но, естественно, это будут разные переменные.
В связи с этим весь мозг уже этой фразой вынес себе. Что на MSDN хотят сказать ей? Если читать дословно, то нет - не только через экземпляр производного класса (т.к. там минимум ничего не сказано про статические методы). Или я не правильно понимаю мысль, которую автор хотел донести? Может прямой доступ возможен, но является плохой практикой? Подскажите, что я упустил?
В интернете ничего подобного найти не смог. На этом форуме были вопросы по этой же статье, но они не смогли ответить на мой(
Член базового класса с модификатором protected доступен в производном классе только в том случае, если доступ осуществляется через тип производного класса.
После этой фразы приводится пример. Я создал тестовое консольное приложение в котором слегка изменил пример, чтобы его результат выводился на экран консоли (смысл это не поменяло). В результате получил следующий код и вывод:class A { protected int x = 123; } class B : A { static void Main() { A a = new A(); B b = new B(); // b.x = 10; - этот код примера заменил на две строки ниже: Console.WriteLine(b.x); Console.Read(); } }
class A { protected int x = 123; } class B : A { public void Meth() { Console.WriteLine(x); //никаких экземпляров класса В не создаю... } } class Program { static void Main() { B b = new B(); b.Meth(); Console.Read(); } }
Решение задачи: «Доступ к члену базового класса с модификатором protected»
textual
Листинг программы
class A { private int x = 123; static void Foo(A obj) { var val = obj.x; } void Bar(A obj) { var val = obj.x; } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д