Chaque fois que je crée un objet qui a une propriété de collection, je fais des allers-retours sur la meilleure façon de le faire ?
- propriété publique avec un getter qui renvoie une référence à la variable privée
- les méthodes explicites get_ObjList et set_ObjList qui retournent et créent des objets nouveaux ou clonés à chaque fois que
- explicite get_ObjList qui renvoie une IEnumerator et un set_ObjList qui prend un IEnumerator
Cela fait-il une différence si la collection est un tableau (par exemple, objList.Clone()) ou une liste ?
Si renvoyer la collection actuelle comme référence est si mauvais parce que cela crée des dépendances, alors pourquoi renvoyer n'importe quelle propriété comme référence ? Chaque fois que vous exposez un objet enfant en tant que référence, les éléments internes de cet enfant peuvent être modifiés sans que le parent ne le sache, à moins que l'enfant n'ait un événement de modification de propriété. Y a-t-il un risque de fuite de mémoire ?
Et, les options 2 et 3 ne cassent-elles pas la sérialisation ? S'agit-il d'un piège ou devez-vous mettre en œuvre une sérialisation personnalisée chaque fois que vous avez une propriété de collection ?
La collection générique ReadOnlyCollection semble être un bon compromis pour une utilisation générale. Il enveloppe une IList et en restreint l'accès. Peut-être cela aide-t-il les fuites de mémoire et la sérialisation. Cependant, il a toujours problèmes de dénombrement
Peut-être que ça dépend. Si vous ne vous souciez pas que la collection soit modifiée, alors exposez-la simplement comme un accesseur public sur une variable privée par numéro 1. Si vous ne voulez pas que d'autres programmes modifient la collection, alors les options 2 et/ou 3 sont préférables.
La question est implicitement de savoir pourquoi une méthode devrait être utilisée plutôt qu'une autre et quelles sont les ramifications sur la sécurité, la mémoire, la sérialisation, etc.