xsd.exe を使用して xsd から自動生成されたクラスに、ICloneable を使用してディープ コピー メソッドを追加しようとしています。単純なレベルで機能させることはできますが、オブジェクトがネストされるとすぐに、クローン メソッドは機能しません。
DirectorReturnType クラスのクローン メソッドが間違っていると確信していますが、それを修正する方法がわかりません。
誰でも何か援助を提供できますか? 以下のサブクラスとクラスを添付しました。
Dim oDirRetType As New DirectorReturnType
Dim oDirPerType As New DirectorPersonType
Dim DirPerTypeT1 As New DirectorPersonType
Dim DirPerTypeT2 As New DirectorPersonType
Dim DirRetTypeT1 As New DirectorReturnType
Dim DirRetTypeT2 As New DirectorReturnType
Dim AROT1 As New AnnualReturnOfficer
Dim AROT2 As New AnnualReturnOfficer
これは期待どおりに機能し、「test1」、「test2」というメッセージが表示されます。
'Works
oDirPerType.Occupation = "test1"
DirRetTypeT1.Item = oDirPerType.Clone
oDirPerType.Occupation = "test2"
DirRetTypeT2.Item = oDirPerType.Clone
DirPerTypeT1 = DirRetTypeT1.Item
DirPerTypeT2 = DirRetTypeT2.Item
MsgBox(DirPerTypeT1.Occupation)
MsgBox(DirPerTypeT2.Occupation)
その後、タイプ AnnualRetunOfficer のオブジェクト AROTx を追加すると、「Test2」、「Test2」の順にメッセージが表示されます。
'Doesnt Work
oDirPerType.Occupation = "test1"
oDirRetType.Item = oDirPerType
AROT1.Item = oDirRetType.Clone
oDirPerType.Occupation = "test2"
DirRetTypeT2.Item = oDirPerType
AROT2.Item = oDirRetType.Clone
DirRetTypeT1 = AROT1.Item
DirPerTypeT1 = DirRetTypeT1.Item
DirRetTypeT2 = AROT2.Item
DirPerTypeT2 = DirRetTypeT2.Item
MsgBox(DirPerTypeT1.Occupation)
MsgBox(DirPerTypeT2.Occupation)
取締役の人物タイプ:
Partial Public Class DirectorPersonType
Inherits PersonBaseType
Implements ICloneable
Private serviceAddressField As ServiceAddressType
Private dOBField As Date
Private nationalityField As String
Private occupationField As String
Private countryOfResidenceField As String
Private previousNamesField() As PreviousNameType
'''<remarks/>
Public Property ServiceAddress() As ServiceAddressType
Get
Return Me.serviceAddressField
End Get
Set(value As ServiceAddressType)
Me.serviceAddressField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute(DataType:="date")> _
Public Property DOB() As Date
Get
Return Me.dOBField
End Get
Set(value As Date)
Me.dOBField = value
End Set
End Property
'''<remarks/>
Public Property Nationality() As String
Get
Return Me.nationalityField
End Get
Set(value As String)
Me.nationalityField = value
End Set
End Property
'''<remarks/>
Public Property Occupation() As String
Get
Return Me.occupationField
End Get
Set(value As String)
Me.occupationField = value
End Set
End Property
'''<remarks/>
Public Property CountryOfResidence() As String
Get
Return Me.countryOfResidenceField
End Get
Set(value As String)
Me.countryOfResidenceField = value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute("PreviousNames")> _
Public Property PreviousNames() As PreviousNameType()
Get
Return Me.previousNamesField
End Get
Set(value As PreviousNameType())
Me.previousNamesField = value
End Set
End Property
Public Function Clone() As Object Implements System.ICloneable.Clone
Return New DirectorPersonType With {.CountryOfResidence = CountryOfResidence, .DOB = DOB, .Forename = Forename, .Nationality = Nationality, .Occupation = Occupation, .OtherForenames = OtherForenames, .PreviousNames = PreviousNames, .ServiceAddress = ServiceAddress, .Surname = Surname, .Title = Title}
End Function
End Class
ディレクター返品タイプ:
Partial Public Class DirectorReturnType
Implements ICloneable
Private itemField As Object
'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute("Corporate",
GetType(CorporateOfficerType)), _
System.Xml.Serialization.XmlElementAttribute("Person",
GetType(DirectorPersonType))> _
Public Property Item() As Object
Get
Return Me.itemField
End Get
Set(value As Object)
Me.itemField = Value
End Set
End Property
Public Function Clone() As Object Implements System.ICloneable.Clone
Return New DirectorReturnType With {.Item = Item}
End Function