Мне нужна помощь в глубоком копировании объектов на VB.net. Я знаю, что есть много вопросов, связанных с этим, но я не смог адаптировать его к своей проблеме. Поэтому, надеюсь, кто-то может объяснить это мне, используя мой код.Создание глубокой копии объекта
Проблема: Я разработал класс clsParameter, который имеет одно имя, один элемент, один тип значения и одно значение. Значение может быть двойным или объектом типа clsVectorParameter со свойствами X, Y, Z. Теперь я хочу сделать глубокую копию параметра так, чтобы X, Y, Z также были скопированы.
Вот два класса. Функция клонирования ниже просто представляет собой манекен. Я знаю, что это не работает, как это, но я не знаю, лучший способ ...
Public Class clsParameter
' Using the ICloneable interface
Implements ICloneable
' Variable definition
Private m_Name As String
Private m_Unit As String
Private m_Type As String
Private m_Value As Object
' Define set and get methods
Public Property Name As String
Get
Return m_Name
End Get
Set(ByVal value As String)
m_Name = value
End Set
End Property
Public Property Unit As String
Get
Return m_Unit
End Get
Set(ByVal value As String)
m_Unit = value
End Set
End Property
Public Property Value As Object
Get
Return m_Value
End Get
Set(ByVal value As Object)
m_Value = value
End Set
End Property
Public Property Type As String
Get
Return m_Type
End Get
Set(ByVal value As String)
m_Type = value
End Set
End Property
' Define constructor
Public Sub New(ByVal p_Name As String, ByVal p_Unit As String, ByVal p_Value As Object, ByVal p_Type As String)
m_Name = p_Name
m_Unit = p_Unit
m_Type = p_Type
m_Value = p_Value
End Sub
' Define Clone function to create independent copies of parameter instances
Public Function Clone() As Object Implements System.ICloneable.Clone
Dim cloneParam As New clsParameter(m_Name, m_Unit, m_Value, m_Type)
Return cloneParam
End Function
End Class
и другой класс:
Public Class clsVectorParameter
Implements ICloneable
' Variable definition
Private m_x As Double
Private m_y As Double
Private m_z As Double
Public Property X As Double
Get
Return m_x
End Get
Set(ByVal value As Double)
m_x = value
End Set
End Property
Public Property Y As Double
Get
Return m_y
End Get
Set(ByVal value As Double)
m_y = value
End Set
End Property
Public Property Z As Double
Get
Return m_z
End Get
Set(ByVal value As Double)
m_z = value
End Set
End Property
' Define constructor
Public Sub New(ByVal p_x As Double, ByVal p_y As Double, ByVal p_z As Double)
m_x = p_x
m_y = p_y
m_z = p_z
End Sub
' Define Clone function to create independent copies
Public Function Clone() As Object Implements System.ICloneable.Clone
Dim cloneVecParam As New clsParameter(m_x, m_y, m_z, "Vec")
Return cloneVecParam
End Function
End Class
Я использую класс в этой строке:
Dim aNewParam As New clsParameter("Name", "Unit", New clsVectorParameter(x,y,z), "Type")
или
Dim aNewParam As New clsParameter("Name", "Unit", Double, "Type")
Позже мне нужно создайте глубокую копию этого aNewParam, поэтому значения x, y, z также независимы для всех параметров.
Большое вам спасибо за помощь! С наилучшими пожеланиями, Себастьян
я бы не использовать 'Clone', так как не ясно, является ли' Clone' делает глубокую или мелкую копию. MS также советует не использовать его. Вот почему это [устарело] (https://blogs.msdn.microsoft.com/brada/2004/05/03/should-we-obsolete-icloneable-the-slar-on-system-icloneable/). Создайте метод 'Copy' /' DeepCopy'. Кроме того, неясно, какая проблема у вас на самом деле. –
Поместите 'Option Strict On' в начало файла исходного кода, чтобы компилятор сообщил вам об ошибке. –
Хорошо, скажем, я использую метод глубокой копии. Может кто-нибудь может объяснить мне, как я реализую его в своем конкретном коде. Я видел много примеров, но адаптация к моей проблеме все время не срабатывает. –