Доступ к члену базового класса с модификатором protected - C#

Узнай цену своей работы

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

Добрый день! Читая MSDN наткнулся на статью по ссылке https://msdn.microsoft.com/ru-ru/library/bcd5672a.aspx . Там описана фраза:

Член базового класса с модификатором protected доступен в производном классе только в том случае, если доступ осуществляется через тип производного класса.

После этой фразы приводится пример. Я создал тестовое консольное приложение в котором слегка изменил пример, чтобы его результат выводился на экран консоли (смысл это не поменяло). В результате получил следующий код и вывод:
Листинг программы
  1. class A
  2. {
  3. protected int x = 123;
  4. }
  5. class B : A
  6. {
  7. static void Main()
  8. {
  9. A a = new A();
  10. B b = new B();
  11. // b.x = 10; - этот код примера заменил на две строки ниже:
  12. Console.WriteLine(b.x);
  13. Console.Read();
  14. }
  15. }
В результате работы программы получил вывод "123". После этого попытался понять, действительно ли обращение к защищенному члену базового класса возможно только через экземпляр производного класса. В примере сверху это действительно так т.к. член базового класса не является статическим и не может использоваться в статическом методе Main(). Тем не менее, если в примере кода с MSDN вынести метод Main() в отдельный класс, то получить доступ к защищенному объекту родительского класса в не статическом методе можно просто по его имени:
Листинг программы
  1. class A
  2. {
  3. protected int x = 123;
  4. }
  5. class B : A
  6. {
  7. public void Meth()
  8. {
  9. Console.WriteLine(x); //никаких экземпляров класса В не создаю...
  10. }
  11. }
  12. class Program
  13. {
  14. static void Main()
  15. {
  16. B b = new B();
  17. b.Meth();
  18. Console.Read();
  19. }
  20. }
При этом в коде выше можно создать экземпляр объекта класса В, и задать для него собственное значение для защищенной переменной "х". Но, естественно, это будут разные переменные. В связи с этим весь мозг уже этой фразой вынес себе. Что на MSDN хотят сказать ей? Если читать дословно, то нет - не только через экземпляр производного класса (т.к. там минимум ничего не сказано про статические методы). Или я не правильно понимаю мысль, которую автор хотел донести? Может прямой доступ возможен, но является плохой практикой? Подскажите, что я упустил? В интернете ничего подобного найти не смог. На этом форуме были вопросы по этой же статье, но они не смогли ответить на мой(

Решение задачи: «Доступ к члену базового класса с модификатором protected»

textual
Листинг программы
  1. class A
  2.     {
  3.         private int x = 123;
  4.  
  5.         static void Foo(A obj)
  6.         {
  7.             var val = obj.x;
  8.         }
  9.  
  10.         void Bar(A obj)
  11.         {
  12.             var val = obj.x;
  13.         }
  14.     }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.154 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы