Cloner une Liste(De Classe)
J'ai fait un peu de lecture et cant semblent envelopper ma tête autour de ce que la meilleure approche serait de cloner une Liste(de classe) dans mon VB2010 projet. J'ai trois classes qui sont liées comme
Public Class City
'here are many fields of type string and integer
Public Roads As New List(Of Road)
End Class
Public Class Road
'here are many fields of type string and integer
Public Hazards As New List(Of Hazard)
End Class
Public Class Hazard
Implements ICloneable
'here are many fields of type string and integer and double
Public Function Clone() As Object Implements System.ICloneable.Clone
Return Me.MemberwiseClone
End Function
End Class
Donc disons que j'ai une ville où je travaille, il y a des cas où j'ai envie de créer, en tant que base d'une route et de ses dangers, puis ajouter une autre route, mais à l'aide de l'état de la routes des dangers comme un point de départ, puis modifiez les champs.
Dim rd As New Road
'add road fields
dim hz1 as New Hazard
'add hazard fields
dim hz2 as New Hazard
'add hazard fields
'add the hazard objects to the road
rd.Hazards.Add(hz1)
rd.Hazards.Add(hz2)
'add the road to the city
myCity.Roads.Add(rd)
'here I want to start a new road based on the old road
Dim rdNew As New Road
'copy or clone the hazards from old road
rdNew.Hazards = rd.Hazards '<============
'over-write some of the hazard fields
rdNew.Hazards(0).Description = "temp"
Donc je sais que la copie d'une classe de copie du pointeur et non le contenu. J'ai utilisé l'interface ICloneable dans la classe de danger, mais ne peux pas dire que je suis à l'utiliser. Les Dangers de la variable est une liste de la classe de Danger. Comment pourrais-je aller sur le clonage de cette classe?
Il semble que vous voulez un profondeur clone?
Je veux une copie de l'ensemble de la chose. En d'autres termes, tous les membres de Risques d'avoir copié sur la nouvelle route. Dangers contient des chaînes, des doubles, des entiers, et d'une énumération. Un clone, je pense, est ce que son nom, de sorte que je ne suis pas simplement en pointant à l'origine des dangers de la classe.
OriginalL'auteur sinDizzy | 2013-01-22
Vous devez vous connecter pour publier un commentaire.
La mise en œuvre de
IClonable
ne signifie pas qu'il remplace l'affectation régulière, il sera toujours simplement copier la référence. Et vous n'êtes même pas de copie des éléments, vous copiez la liste, ce qui signifie que vous devez toujours avoir une seule liste, mais deux références.D'utiliser le
Clone
méthode, vous devez appeler pour chaque élément dans la liste:Dans mes tests, cela semble être au travail. Je vais poster de retour si je trouve tous les problèmes.
OriginalL'auteur Guffa
OriginalL'auteur Tom