Passer un tableau ou une liste par référence en C#
Un tableau ou une liste en C# est-il passé par référence ou par valeur par défaut ? Cette question revient souvent lorsqu’on cherche à optimiser les performances. Explorons la réponse et discutons si le passage par référence est un choix judicieux pour plus d'efficacité.
Réponse :
En C#, les tableaux et les listes sont transmis par valeur et non par référence. Cela signifie qu'une référence au tableau ou à la liste est copiée dans l'appel de fonction, plutôt que dans le tableau ou la liste elle-même.
Lorsqu'un tableau ou une liste est passé à une fonction, la référence sur le tas est copiée dans la pile. Les modifications apportées au contenu du tableau ou de la liste dans la fonction seront visibles par l'appelant car la référence pointe vers le même emplacement en mémoire. Cependant, toute tentative de réaffectation du tableau ou de la liste elle-même (c'est-à-dire modifier la référence) ne sera pas reflétée dans la portée de l'appelant.
<code class="language-c#">void Foo(int[] data) { data[0] = 1; // 调用者可以看到此更改 } void Bar(int[] data) { data = new int[20]; // 但看不到此更改 }</code>
Dans l'exemple ci-dessus, Foo modifie le premier élément du tableau et ce changement est visible par l'appelant. Cependant, Bar attribue un nouveau tableau aux données, qui est invisible pour l'appelant.
Utilisez le modificateur 'ref' pour passer par référence
Si vous avez besoin que l'appelant voie les modifications apportées à la référence elle-même, vous pouvez utiliser le modificateur ref. Lorsqu'un paramètre est passé par ref, la référence réelle est transmise, pas une copie. Cela signifie que toute modification apportée à la référence dans la fonction sera reflétée dans la portée de l'appelant.
<code class="language-c#">void Foo(ref int[] data) { data = new int[20]; // 调用者可以看到此更改 }</code>
Suggestions d'optimisation
Bien que passer des tableaux ou des listes par référence puisse sembler un moyen d'améliorer les performances, cela n'est généralement pas recommandé. Le passage par valeur garantit que toute modification apportée à un tableau ou une liste est localisée dans la fonction, empêchant ainsi les modifications involontaires d'autres parties du programme. De plus, les optimiseurs .NET modernes peuvent souvent gérer efficacement le passage par valeur sans intervention manuelle.
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!