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