Почему не делает поддержки C# понятие о Конструкторе Копии?

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

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

14
задан Kevin Panko 16 September 2016 в 18:17
поделиться

3 ответа

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

6
ответ дан 1 December 2019 в 07:27
поделиться

Не так ли?

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

Но, возможно, я немного не понимаю, какие еще правила применяются в C++ (где был придуман термин copy constructor).

2
ответ дан 1 December 2019 в 07:27
поделиться

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

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

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

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

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

28
ответ дан 1 December 2019 в 07:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: