Comprendre la liste
Le code fourni démontre un piège courant lors de l'utilisation de types de référence avec des listes. La classe Tag
, étant un type référence, signifie que les variables contiennent une référence à l'emplacement mémoire de l'objet, et non une copie de l'objet lui-même.
Au sein de la boucle, la même _tag
instance est modifiée à plusieurs reprises. Chaque ajout à la liste ne crée pas un nouvel objet Tag
; à la place, il ajoute une autre référence au même _tag
objet. Par conséquent, la liste finale contient plusieurs références pointant vers le dernier état modifié de _tag
.
Pourquoi utiliser struct
résout le problème
Changer public class Tag
en public struct Tag
résout le problème car les structures sont des types valeur. Lorsqu'une structure est attribuée, une copie des données de la structure est créée. Par conséquent, chaque itération de la boucle crée une instance _tag
complètement indépendante. Les modifications apportées à une instance n'affectent pas les autres, ce qui donne lieu à une liste d'objets Tag
uniques.
Pertinence des classes de collection dérivées
Le problème n'est pas inhérent à la conception de la TagCollection
classe. La classe TagCollection
elle-même semble correctement implémentée. Le problème principal réside dans la façon dont l'instance _tag
est gérée dans la boucle qui remplit la liste, en particulier la modification répétée d'une seule instance de type référence.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!