Как программно создать копию экземпляра класса в .NET
Чтобы создать копию экземпляра класса в приложении .NET, его нельзя просто присвоить значению другого объекта. Как известно, классы в .NET относятся к ссылочному типу, и при присваивании объекта другому объекту, будет присвоена только ссылка на исходный объект. А при попытке изменить какое-то из полей или свойств вновь созданного объекта, изменится соответствующее поле или свойство исходного объекта. Поэтому, как вариант, можно поступить так (код на VB.NET):
Public Shared Function GetCopy(ByVal myOriginalObject As MyObject) As MyObject 'Получаем список публичных свойств экземпляра типа MyObject:' Dim props() As PropertyInfo = myOriginalObject.GetType.GetProperties(BindingFlags.Public Or BindingFlags.Instance) Dim myObjectCopy As New MyObject 'Копируем значения всех свойств, доступных для записи:' For Each pi As PropertyInfo In props If pi.CanWrite Then Dim value As Object = pi.GetValue(myOriginalObject, Nothing) pi.SetValue(myObjectCopy, value, Nothing) End If Next Return myObjectCopy End Function
Можно воспользоваться и таким решением:
Dim newObj as Object = obj.MemberwiseClone()
Нужно учесть, что этот метод MemberwiseClone() копирует объект не полностью. Члены значимого типы копируются, а ссылочного – нет, копируется только ссылка.
Ключевые слова: :