Чтобы создать копию экземпляра класса в приложении .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() копирует объект не полностью. Члены значимого типы копируются, а ссылочного – нет, копируется только ссылка.