Почему MemberwiseClone () нельзя использовать напрямую, как и другие унаследованные методы класса Object? (Для мелкой копии) - PullRequest
0 голосов
/ 17 апреля 2020

Допустим, у меня есть некоторый пользовательский тип:

public class MyClass
{
   public int Age;
}

Согласно документации MS здесь , все классы в. NET являются производными от Object, и каждый метод, определенный в Класс объекта доступен во всех объектах в системе

Поскольку Object.MemberwiseClone () является частью класса объекта, поэтому я не могу сделать поверхностное копирование, просто вызвав его экземпляр формы в моем пользовательском классе, например «Equals». (), GetHashCode () и т. Д. c? Почему я не могу сделать что-то вроде этого:

class Program
{
     static void Main(string[] args)
     {
         MyClass myClass = new MyClass();
         MyClass myClassCopy = (MyClass)myClass.MemberwiseClone();  //Not working!
     }
}

Вместо этого во всех примерах, которые я вижу, мне нужно реализовать метод поверхностного копирования явно вроде:

public class MyClass
{
    public int Age;
    public MyClass ShallowCopy()
    {
        return (MyClass)MemberwiseClone();
    }
}

И только тогда я могу вызвать этот метод ShallowCopy ().

[EDIT]

Я думаю, что этот вопрос здесь объясняется суть: Почему MemberwiseClone определен в System.Object защищен? Мне нужно было спросить, в чем причина того, чтобы Object.MemberwiseClone () был закрытым, и основная причина: Проблема здесь в том, что MemberwiseClone просто слепой полицейский это государство. Во многих случаях это нежелательно

1 Ответ

2 голосов
/ 17 апреля 2020

Это protected метод - по-видимому, позволяющий реализации каждого класса принимать решение о том, имеет ли смысл для клонирования смысл , и, если да, то как предоставить его вызывающим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...