Brunni (./247) :
Je l'attendais celle-là
Les paramètres sont toujours par valeur, une référence est une valeur (ou une adresse si tu préfères, c'est à dire un entier passé par copie).
Oui et tout est ultimement une valeur mais si tes objets sont des références, alors tu passes les objets par référence dans les fonctions, c'est tout. Et l'implication de ça c'est que ton objet peut toujours être modifié directement par la fonction (le contrat "const" n'existe ni en Java ni en C#... pour l'instant

).
D'ailleurs en C# le type struct j'évite vraiment sur le principe, les seuls cas où ça se justifie c'est pour les vecteurs, bigint et autres, mais c'est particulier.
C'est pas du tout particulier ça, justsement. Et c'est bon pour les performances quand tu peux en mettre. C'est mieux de stocker 1000 structures de 20 octets dans une liste que 1000 pointeurs (de 8 octets) vers des classes de 20 octets allouées sur le tas.
(C'est aussi valable pour le C++ ce que je dis là hein

)
Ensuite l'utilisation abusive de ref en C# dénote presque toujours un code de merde, du moins d'un point de vue POO (je ne trouve pas de contre-exemple).
C'est pourtant pas compliqué, j'en ai
un très bon. Depuis que cette méthode existe, j'ai essayé tant bien que mal de trouver des cas où utiliser que l'indexeur [] bête et méchant du dictionnaire s'avérait plus intéressant, mais je cherche encore...
Ensuite utiliser une référence const juste pour améliorer les perfs c'est pas mal sur le principe et on peut justifier que c'est une bonne habitude, mais c'est déjà un truc "avancé" qui est contraignant et pas très bon pour débuter
C'est pas vraiment d'un très haut niveau, mais c'est vraiment une bonne habitude à prendre. Par contre ne pas tomber dans le jeu complètement con de foutre des références sur des types dont la taille est inférieure à ±deux fois celle d'un pointeur, car ça c'est vraiment débile. (Ça n'empêche pas de mettre le const par propreté par contre... Mais le code qui utilise les paramètres en tant que variables c'est cool aussi ! \o/)
et je le répète mais ça correspond à une programmation procédurale, pas objet, puisque tu utilises ton objet comme un enregistrement.
Je vois pas en quoi le fait d'utiliser une référence veut dire que tu utilise ton objet comme un enregistrement mais bon... ^^