Создать экземпляр локальной переменной по значению?

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

  •  19-09-2019
  •  | 
  •  

Вопрос

Я вроде понимаю, почему так происходит, но не совсем.У меня есть базовый класс с Shared (Static) переменная, объявленная так:

Public Shared myVar As New MyObject(arg1, arg2)

В методе производного класса я установил локальную переменную следующим образом:

Dim myLocalVar As MyObject = myVar

Теперь, когда я делаю что-то вроде myLocalVar.Property1 += value, значение в Property1 сохраняется до следующего вызова этого метода!полагаю, я получу почему это произойдет; myVar устанавливается по ссылке, а не по значению, но я никогда раньше не сталкивался с чем-то подобным.Есть ли какой-нибудь способ (кроме моего обходного пути, который заключается в том, чтобы просто создать новый объект, используя значения свойств myVar) создавать myLocalVar по стоимости?

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

Решение

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

Это делается либо путем клонирования экземпляра, либо с помощью конструктора копирования типа, который позволяет создать копию экземпляра.Однако это не так просто, как кажется, из-за различий между глубоким и поверхностным копированием, и клонированный или скопированный экземпляр может создать для вас аналогичные проблемы, если свойство, к которому вы обращаетесь, представляет собой просто поверхностно скопированную ссылку на тот же экземпляр, который ссылается на свойство исходного экземпляра.

Лучшее, что я могу сделать в этом случае, — это создать локальную копию только тех частей общего экземпляра, которые вам нужны, а не копировать весь граф объекта.Это означает создание локальной копии любого типа. Property1 есть и использует это.

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