#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 } }
Комментариев нет:
Отправить комментарий