Подтвердить что ты не робот

Почему С# не поддерживает концепцию Copy Constructor?

Мне задали этот вопрос в одном из моих интервью, но я не смог точно узнать, почему этого понятия нет.

Пожалуйста, дайте мне знать.

4b9b3361

Ответ 1

Он не встроен в язык, потому что не существует разумной реализации по умолчанию.

Конструкторы копирования страдают от многих тех же двусмысленностей, что и клонирование. Например, хотите ли вы сделать мелкую копию или глубокую копию, зависит от ваших конкретных обстоятельств.

Скажем, у вас есть класс Order со свойством Customer. Должен ли его конструктор копирования создать нового клиента или указать на исходный экземпляр? Возможно, исходный экземпляр - но как насчет Order.Payment?

Хуже того, даже если вы хотите выполнить глубокую копию, вы даже не сможете создать все свои подчиненные объекты, потому что их конструкторы (или сопоставимые методы factory) могут быть недоступны.

В случае, если этого недостаточно, в этой статье по проблемам проектирования Java выделяются некоторые другие проблемы (например, усечение типа).

Ответ 2

Каким образом С# не поддерживает идею конструктора копирования? Вы более чем свободны создавать тот, который копирует настолько, насколько вам нравится.

Ответ 3

Не так ли?

class Foo
{
   public Foo (Foo other)   // copy ctor
   { ... }
}

Но, может быть, я немного ржавчивый о том, что другие правила применяются в С++ (где был использован термин конструктор копирования).