การให้ค่ากับ object
http://greatfriends.biz/?113627
คำถามมีดังนี้ครับ
ผมสร้าง class Node กับ Variable
ซึ่ง class Node ก็ประกอบไปด้วยตัวแปรต่าง
และก็มี Variable
ส่วน class Variable ก็ประกอบไปด้วยตัวแปรต่าง
เมื่อผมต้องการกำหนดค่าให้กับ Node ก็สร้าง Node node = new Node;
Variable variable = new Variable;
variable. = .....;ก็กำหนดค่าให้
แล้วก็ node.Variable = variable;
ที่นี้พอผมเปลี่ยนค่า ใน
variable variable. = .....;
ที่นี้node.Variable ก็เลยเปลียนตามไปด้วย
แต่ผมไม่ต้องการให้เปลี่ยน
ผมเลยอยากทราบว่าต้องเซตค่าnode.Variable =
variableยังไงถึงค่าในnode.Variable กับ variable
แยกออกจากกันไม่สัมพันธ์กันอ่ะครับ
ลักษณะนี้ก็คือ เราต้องการให้ Variable Object ที่ถูกกำหนดค่าให้ Node Object เป็นคนละตัวกับ Variable Object ที่เราสร้างไว้แต่แรก ผมเลยเสนอให้ใช้ ICloneable Interface ครับ ก็เลยคิดว่าน่าจะลองเขียนทดสอบเล่นๆดู มาลองดูโค้ดกันครับ
ส่วนของ Variable Class ที่เราทำการ Implement ICloneable ครับ
Public Class Variable
Implements ICloneable
Private _variableName As String
Private _value As String
Public Property Value() As String
Get
Return _value
End Get
Set(ByVal value As String)
_value = value
End Set
End Property
Public Property VariableName() As String
Get
Return _variableName
End Get
Set(ByVal value As String)
_variableName = value
End Set
End Property
Public Function Clone() As Object Implements System.ICloneable.Clone
Return TryCast(MemberwiseClone(), Variable)
End Function
End Class
ส่วนของ Node Class
Public Class Node
Private _nodeId As Integer
Private _nodeName As String
Private _variable1 As Variable
Private _variable2 As Variable
Public Property Variable2() As Variable
Get
Return _variable2
End Get
Set(ByVal value As Variable)
_variable2 = value
End Set
End Property
Public Property Variable1() As Variable
Get
Return _variable1
End Get
Set(ByVal value As Variable)
_variable1 = value
End Set
End Property
Public Property NodeName() As String
Get
Return _nodeName
End Get
Set(ByVal value As String)
_nodeName = value
End Set
End Property
Public Property NodeId() As Integer
Get
Return _nodeId
End Get
Set(ByVal value As Integer)
_nodeId = value
End Set
End Property
End Class
และทีนี้ก็มาทดสอบกัน
Dim myNode As New Node
Dim myVar1 As New Variable
Dim myVar2 As New Variable
myNode.NodeId = 1
myNode.NodeName = "Test"
myVar1.VariableName = "EmployeeName"
myVar1.Value = "Nithi"
myVar2.Value = "EmployeeSurname"
myVar2.Value = "Juabsamai"
myNode.Variable1 = myVar1.Clone
myNode.Variable2 = myVar2
Debug.Print("{0} - {1} {2}", myNode.NodeName, myNode.Variable1.Value, myNode.Variable2.Value)
myVar1.Value = "Wanwimon"
myVar2.Value = "Permpanit"
Debug.Print("{0} - {1} {2}", myNode.NodeName, myNode.Variable1.Value, myNode.Variable2.Value)
myNode.Variable1.Value = "Nithi"
myNode.Variable2.Value = "Juabsamai"
Debug.Print("{0} - {1} {2}", myNode.NodeName, myNode.Variable1.Value, myNode.Variable2.Value)
Debug.Print("Variable2 = " & myVar2.Value)
ที่น่าสนใจคือ .NET ได้เตรียม MemberwiseClone Function มาให้เราเรียบร้อยแล้ว ไม่ต้องเขียนเอง สะดวกดีครับ หลังจากทดสอบดูแล้ว คิดว่าน่าจะตรงกับที่เจ้าของกระทู้ที่ GreatFriends ต้องการนะครับ
ไม่มีความคิดเห็น:
แสดงความคิดเห็น