Доступ к члену базового класса с модификатором 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;
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д