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

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

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

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

Член базового класса с модификатором 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();
        }
    }
В результате работы программы получил вывод "123". После этого попытался понять, действительно ли обращение к защищенному члену базового класса возможно только через экземпляр производного класса. В примере сверху это действительно так т.к. член базового класса не является статическим и не может использоваться в статическом методе Main(). Тем не менее, если в примере кода с MSDN вынести метод Main() в отдельный класс, то получить доступ к защищенному объекту родительского класса в не статическом методе можно просто по его имени:
  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();
        }
    }
При этом в коде выше можно создать экземпляр объекта класса В, и задать для него собственное значение для защищенной переменной "х". Но, естественно, это будут разные переменные. В связи с этим весь мозг уже этой фразой вынес себе. Что на MSDN хотят сказать ей? Если читать дословно, то нет - не только через экземпляр производного класса (т.к. там минимум ничего не сказано про статические методы). Или я не правильно понимаю мысль, которую автор хотел донести? Может прямой доступ возможен, но является плохой практикой? Подскажите, что я упустил? В интернете ничего подобного найти не смог. На этом форуме были вопросы по этой же статье, но они не смогли ответить на мой(

Решение задачи: «Доступ к члену базового класса с модификатором 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;
        }
    }

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


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

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

13   голосов , оценка 4.154 из 5
Похожие ответы