Страницы

Поиск по вопросам

четверг, 2 апреля 2020 г.

Почему нам доступна возможность вызвать MemberwiseClone во время процесса клонирования?

#c_sharp #клонирование

                    
Читая документацию по C# про метод MemberwiseClone() наткнулся на такой пример :

using System;

class MyBaseClass {
   public static string CompanyName = "My Company";
   public int age;
   public string name;
}

class MyDerivedClass: MyBaseClass {

   static void Main() {

   // Creates an instance of MyDerivedClass and assign values to its fields.
   MyDerivedClass m1 = new MyDerivedClass();
   m1.age = 42;
   m1.name = "Sam";

   // Performs a shallow copy of m1 and assign it to m2.
   MyDerivedClass m2 = (MyDerivedClass) m1.MemberwiseClone();
   }
}


У меня возник вопрос касательной вот этой строчки :

MyDerivedClass m2 = (MyDerivedClass) m1.MemberwiseClone();


Какое право мы имеем вызывать метод на объекте если в его сигнатуре прописан модификатор
доступа protected ?
    


Ответы

Ответ 1



Потому, что MemberwiseClone является методом класса Objeсt от которого наследуется MyDerivedClass, внутри которого и происходит вызов (Main тоже метод MyDerivedClass). Другими словами, внутри MyDerivedClass происходит вызов собственного protected-метода. Если бы MemberwiseClone вызывался у стороннего класса не связанного отношением наследования с вызывающим, то была бы ошибка на этапе компиляции: using System; class Another { } class MyDerivedClass { static void Main() { Another m1 = new Another(); Another m2 = (Another) m1.MemberwiseClone(); // Error } }

Комментариев нет:

Отправить комментарий