-
Как сделать копию объекта, не имеющего реализации интерфейса ICloneable?
-
Переписать все свойства во вновь созданный ?
-
Ага, я что-то подобное нашла на другом форуме. Там реализован контруктор, который как аргумент принимает обхект того же типа. На простом вроде понятно. А на сложном уже не очень ((. Вот их пример: public class A { private int x; public A(int val) { x = val; } public A(A a) { x = a.x; } } class Program { static void Main() { A a1 = new A(10); // создаем объект A a2 = new A(a1); // делаем копию объекта a1 } }
А если у меня посложнее объект? Он создасться полностью и я буду заменять/переписывать только нужные свойства, или мне надо все как в нормальном конструкторе заново делать?
-
> Галинка © (04.12.06 20:15) [2]
А что непонятно со сложным? Клонирование объекта и есть - создание нового с инициализацией свойств и т.д. по данным клонируемого, т.е. точной копии. Интерфейс ICloneable только унифицирует метод доступа к этой фичи, и только. Все равно, что Вы будете делать без него или с ним, это вас не избавит от рутины. :)
-
> Галинка © (04.12.06 20:15) [2] > Он создасться полностью и я буду заменять/переписывать только > нужные свойства,
А вот это уже зависит от того, что конкретно надо вам. Если Ваша задача позволит не создавать полной копии, то тогда необходимо заменять/переписывать только то что надо.
-
> Как сделать копию объекта, не имеющего реализации интерфейса > ICloneable?
Нужно унаследоваться от этого объекта, и реализовать ICloneable. в простейшем случае, для реализации ICloneable можно воспользоваться MemberwiseClone(). Например:
class MyCloneableClass:MyClass, ICloneable { public object Clone() { return MemberwiseClone(); } }
|