ICLoniable VS сильно набирается функция против ленивых

StackOverflow https://stackoverflow.com/questions/3683716

  •  02-10-2019
  •  | 
  •  

Вопрос

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

Я просто на этапе документации и концепции на данный момент, поэтому не так, чтобы получить правильно.

Q1. Зачем реализовать iclonable и вернуть объект, когда вы можете написать настоятельно напечатанную пользовательскую функцию, которая возвращает правильный тип объекта клонирован?

Q2. Объекты не являются огромными, и я не против, чтобы сделать начальную тяжелую подъемное копирование каждого элемента, но, ленивый, я мог бы создать объект, а затем добавить конкретный код для ссылок членов снова, это создало бы необходимость для литья, так что то, что более эффективно С точки зрения циклов ЦП?

Любые мысли, мнения и размышления приветствовали.

Это было полезно?

Решение

Видеть 536349 по причинам не реализовать iclonable; По сути, вы можете определить свой собственный (категорически набранный) интерфейс и использовать это, я не вижу проблем с ним, пока он правильно документирует, что это создает глубокие копии.

Другие советы

Цель интерфейса состоит в том, чтобы люди работали на объектах, которые поддерживают интерфейс без необходимости беспокоиться о том, что на самом деле являются объектами. Не зная, что iClonable.Clone на самом деле собирается делать на любом данном объекте, просто зная, что объект поддерживает Iclonable, довольно бесполезно.

Было бы полезно для типов сбора, чтобы иметь охраняемый метод BaseClone, и для них имели полученный тип, который сделает его общественностью (делая то, что способ, которым позволяет получить клобильные и не наборные типы из коллекций). Наличие чего-то вроде словаря, поддерживающую метод клона, будет лучше, чем включать в себя конструктор копирования, поскольку аргумент к конструктору копирования может быть типом, который вытекает из словаря, но был значительно отличным внутренне.

Для полезного интерфейса к клонированию необходимо было бы включить свойство, по которым элементы могут сказать, как они чувствовались о клонировании (например, -1- тип неизменной и не нуждается в клонировании; -2- клонирование типа, вероятно, сломается Это; -3- Тип поддерживает клонирование), и укажите, что операция глубокого значения будет проверять все объекты, чтобы убедиться, что они не против быть клонированным, и если это было так, он бы клонируется все вложенные воистые предметы. К сожалению, ничего подобного существует в рамках.

Имея интерфейс, чтобы указать, что объект клончен, может быть полезен, если набор производных типов включает в себя кловые и не клонируемые версии. Если возможно, что производные типа не могут быть в состоянии поддерживать клонирование, методы клонирования этого типа должны быть защищены; С нее должна быть получена к кложикой версии типа, но другие типы должны быть получены из неклимных версий.

Например, можно иметь виджет типа с полученными типами, включая клонбиджет и супервиджет (который не вложена). SUPERWIDGET может иметь полученный тип клонмеалепервиджет (наряду с некоторыми другими, которые сломались бы, если бы клонировать). Если кто-то хочет иметь возможность работать со всеми кловыми производными виджета типа, можно было бы проверить оба того, что объект вытекает из виджета, и что он будет клонным. Добавление Iclonable для клогодных производных позволит вам проверить для такого объекта.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top