Информация об изменениях

Сообщение Re: Подскажите как поменять обьект во всех ссылках от 21.03.2016 12:35

Изменено 07.01.2017 16:56 Sinix

Re: Подскажите как поменять обьект во всех ссылках
Здравствуйте, Alexander_fx, Вы писали:

A_>Вопрос

A_>например c.obj =new object2
A_>как сделать чтобы a.obj и b.obj теперь ссылались на новый object2 который в c.obj

  • Архитектурно — сфероконический: Сделать ValueHolder<T>, всем ссылаться на ValueHolder<T>, менять ValueHolder<T>.Value
  • Fowler-driven: Тут нужен DI с IOC-ом. Не знаю зачем, но нужен.
  • Math-driven: Так это ж легко! Это уже было в симпсонах smalltalk, вам остаётся всего лишь перевести на него ваш код. Не благодарите.
  • Oldschool math-driven:и в фортране тоже.
  • Оппа-оппа pointer-style:
    public static void Replace<T>(T x, T y)
        where T : class
    {
        var size = Marshal.SizeOf(typeof(T));
        var ptr = Marshal.AllocHGlobal(size);
        Marshal.StructureToPtr(y, ptr, false);
        Marshal.PtrToStructure(ptr, x);
        Marshal.FreeHGlobal(ptr);
    }
    (c)
  • Скучный правильный: Заводим класс SomeOpContext с нужными свойствами, протаскиваем контекст, изменяем свойства по необходимости.

    Выбирайте
  • Re: Подскажите как поменять обьект во всех ссылках
    Здравствуйте, Alexander_fx, Вы писали:

    A_>Вопрос

    A_>например c.obj =new object2
    A_>как сделать чтобы a.obj и b.obj теперь ссылались на новый object2 который в c.obj

  • Архитектурно — сфероконический: Сделать ValueHolder<T>, всем ссылаться на ValueHolder<T>, менять ValueHolder<T>.Value
  • Fowler-driven: Тут нужен DI с IOC-ом. Не знаю зачем, но нужен.
  • Math-driven: Так это ж легко! Это уже было в симпсонах smalltalk, вам остаётся всего лишь перевести на него ваш код. Не благодарите.
  • Oldschool math-driven:и в фортране тоже.
  • Оппа-оппа pointer-style:
    public static void Replace<T>(T x, T y)
        where T : class
    {
        var size = Marshal.SizeOf(typeof(T));
        var ptr = Marshal.AllocHGlobal(size);
        Marshal.StructureToPtr(y, ptr, false);
        Marshal.PtrToStructure(ptr, x);
        Marshal.FreeHGlobal(ptr);
    }
    (c)
  • Скучный правильный: Заводим класс SomeOpContext с нужными свойствами, протаскиваем контекст, изменяем свойства по необходимости.

    Выбирайте
  • полезные_советы