title: Create deep copy of object
body: <p>I need help with the deep copying of objects in VB.net. I am aware of the fact that there is a great amount of topics dealing with that, but I was not able to adapt it to my problem. So hopefully someone can explain it to me using my code.</p>
  
  <p>The problem: I have designed a class clsParameter which has one name, one unit, one value type and one value. The value can be a double or an object of type clsVectorParameter with the properties X,Y,Z. Now I want to do a deep copy of a parameter so that X,Y,Z are also copied.</p>
  
  <p>Here are the two classes. The clone function below just represents a dummy. I know that it doesn't work like this but I didn't know a better way...</p>
  
  <pre><code>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
  </code></pre>
  
  <p>and the other class:</p>
  
  <pre><code>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
  </code></pre>
  
  <p>I use the class in this line:</p>
  
  <pre><code>Dim aNewParam As New clsParameter("Name", "Unit", New clsVectorParameter(x,y,z), "Type")
  </code></pre>
  
  <p>or</p>
  
  <pre><code>Dim aNewParam As New clsParameter("Name", "Unit", Double, "Type")
  </code></pre>
  
  <p>Later I need to create a deep copy of this aNewParam, so the x,y,z values are also independent for all parameters.</p>
  
  <p>Thank you very much for your help!
  Best regards, 
  Sebastian</p>