Как я узнал, что не рекомендуется реализовывать ICloneable
(due to the fact that it does not differentiate between Deep Copy or Shallow Copy), я пытаюсь определить, следует ли мне реализовать его как абстрактный или интерфейс.Реализация пользовательской функции клонирования/копирования: абстрактный или интерфейс?
Я чувствую, что моя реализация останется в основном той же самой, например. a binary deep copy и MemberwiseClone
shallow copy, поэтому с этой целью я чувствовал, что абстрактный метод был бы идеальным. Тем не менее, я понимаю, что C# не выполняет множественное наследование, поэтому, если мне когда-либо понадобится использовать еще один абстрактный класс, то я больше не могу.
В этом случае, я считаю, что реализация пользовательского ICloneable
(например, ICustomCloneable
) будет лучший вариант, но если реализация фактически то же самое во многих классах, я чувствую, что я не должным образом воспользоваться повторного использования кода ,
Говоря это, действительно ли используется интерфейс для сохранения абстрактного наследования для более важных вещей в моих клонируемых классах? Или есть другой способ сделать это?
В качестве альтернативы, действительно ли это (читать: не вонючий) для абстракции для реализации другого абстрактного? Это было бы моим предположением о том, чтобы обойти однонаследование, которое мешает мне реализовать класс CloneCapable, а также еще один абстрактный, но похоже, что это может быть сомнительным. например,
public abstract class CloneCapable
{
public object ShallowCopy()
{
// implementation
}
public object DeepCopy()
{
// implementation
}
}
public abstract class ClassA : CloneCapable {}
// abstract-abstract since I can't do ClassB : ClassA, CloneCapable
public abstract class ClassB : ClassA {}
Отличное понимание, я ценю его. – Arclight