Les structures et les champs nus faciliteront l'interopérabilité avec certaines API non gérées. Souvent, vous constaterez que l'API de bas niveau veut accéder aux valeurs par référence, ce qui est bon pour les performances (car nous évitons une copie inutile). L'utilisation de propriétés est un obstacle à cela, et souvent les bibliothèques d'encapsuleurs font des copies pour la facilité d'utilisation et parfois pour la sécurité.
De ce fait, vous obtiendrez souvent de meilleures performances avec des types de vecteurs et de matrices qui n'ont pas de propriétés mais des champs nus.
Les meilleures pratiques ne se créent pas sous vide. Malgré un certain culte du fret, en général, les meilleures pratiques sont là pour une bonne raison.
Dans ce cas, nous avons un couple:
Une propriété vous permet de modifier l'implémentation sans changer le code client (au niveau binaire, il est possible de changer un champ en une propriété sans changer le code client au niveau source, mais il se compilera en quelque chose de différent après le changement) . Cela signifie qu'en utilisant une propriété depuis le début, le code qui fait référence au vôtre n'aura pas à être recompilé juste pour changer ce que fait la propriété en interne.
Si toutes les valeurs possibles des champs de votre type ne sont pas des états valides, vous ne souhaitez pas les exposer au code client qui le modifiera. Ainsi, si certaines combinaisons de valeurs ne sont pas valides, vous souhaitez conserver les champs privés (ou internes).
J'ai dit le code client. Cela signifie un code qui appelle le vôtre. Si vous ne faites pas de bibliothèque (ou même si vous faites de la bibliothèque mais que vous utilisez interne au lieu de public), vous pouvez généralement vous en tirer avec une bonne discipline. Dans cette situation, la meilleure pratique d'utilisation des propriétés est de vous empêcher de vous tirer une balle dans le pied. De plus, il est beaucoup plus facile de raisonner sur le code si vous pouvez voir tous les endroits où un champ peut changer dans un seul fichier, au lieu d'avoir à vous soucier de tout ce qui est en train d'être modifié ailleurs. En fait, les propriétés sont également bonnes pour mettre des points d'arrêt lorsque vous déterminez ce qui ne va pas.
Oui, il est utile de voir ce qui se fait dans l'industrie. Cependant, avez-vous une motivation pour aller à l'encontre des meilleures pratiques? ou allez-vous simplement à l'encontre des meilleures pratiques - rendant le code plus difficile à raisonner - simplement parce que quelqu'un d'autre l'a fait? Ah, au fait, "les autres le font", c'est comme ça que vous démarrez un culte du cargo.
Alors ... Votre jeu tourne-t-il lentement? Il vaut mieux consacrer du temps à trouver le goulot d'étranglement et à le corriger, au lieu de spéculer sur ce que cela pourrait être. Vous pouvez être assuré que le compilateur fera beaucoup d'optimisations, à cause de cela, il est probable que vous cherchiez le mauvais problème.
D'un autre côté, si vous décidez quoi faire pour commencer, vous devez d'abord vous soucier des algorithmes et des structures de données, au lieu de vous soucier de petits détails tels que les champs par rapport aux propriétés.
Enfin, gagnez-vous quelque chose en allant à l'encontre des meilleures pratiques?
Pour les particularités de votre cas (Unity et Mono pour Android), Unity prend-il des valeurs par référence? Si ce n'est pas le cas, il copiera les valeurs de toute façon, aucun gain de performances là-bas.
Si c'est le cas, si vous transmettez ces données à une API qui prend ref. Est-il judicieux de rendre le champ public, ou vous pourriez rendre le type capable d'appeler directement l'API?
Oui, bien sûr, il pourrait y avoir des optimisations que vous pourriez faire en utilisant des structures avec des champs nus. Par exemple, vous y accédez avec des pointeurs Span<T>
ou similaires. Ils sont également compacts en mémoire, ce qui les rend faciles à sérialiser pour envoyer sur le réseau ou à mettre en stockage permanent (et oui, ce sont des copies).
Maintenant, avez-vous choisi les bons algorithmes et structures, s'ils se révèlent être un goulot d'étranglement, alors vous décidez quelle est la meilleure façon de le corriger ... qui pourrait être des structures avec des champs nus ou non. Vous pourrez vous en soucier si et quand cela se produit. Pendant ce temps, vous pouvez vous soucier de questions plus importantes telles que faire un bon jeu amusant.