Конференция ".Net" » Копия объекта [C#, WinXP]
 
  • Галинка © (04.12.06 19:04) [0]
    Как сделать копию объекта, не имеющего реализации интерфейса ICloneable?
  • saxon (04.12.06 19:41) [1]
    Переписать все свойства во вновь созданный ?
  • Галинка © (04.12.06 20:15) [2]
    Ага, я что-то подобное нашла на другом форуме. Там реализован контруктор, который как аргумент принимает обхект того же типа. На простом вроде понятно. А на сложном уже не очень ((. Вот их пример:
    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
       }
    }

    А если у меня посложнее объект? Он создасться полностью и я буду заменять/переписывать только нужные свойства, или мне надо все как в нормальном конструкторе заново делать?
  • saxon (04.12.06 23:06) [3]

    > Галинка ©   (04.12.06 20:15) [2]

    А что непонятно со сложным?
    Клонирование объекта и есть - создание нового с инициализацией свойств и т.д. по данным клонируемого, т.е. точной копии.
    Интерфейс ICloneable только унифицирует метод доступа к этой фичи, и только. Все равно, что Вы будете делать без него или с ним, это вас не избавит от рутины. :)
  • saxon (04.12.06 23:10) [4]

    > Галинка ©   (04.12.06 20:15) [2]
    > Он создасться полностью и я буду заменять/переписывать только
    > нужные свойства,

    А вот это уже зависит от того, что конкретно надо вам. Если Ваша задача позволит не создавать полной копии, то тогда необходимо заменять/переписывать только то что надо.
  • Algol (05.12.06 01:35) [5]

    > Как сделать копию объекта, не имеющего реализации интерфейса
    > ICloneable?


    Нужно унаследоваться от этого объекта, и реализовать ICloneable. в простейшем случае, для реализации ICloneable можно воспользоваться MemberwiseClone(). Например:

    class MyCloneableClass:MyClass, ICloneable
    {
       public object Clone()
       {
            return MemberwiseClone();
       }
    }
 
Конференция ".Net" » Копия объекта [C#, WinXP]
Есть новые Нет новых   [120081   +34][b:0][p:0]