Maison > développement back-end > C++ > Les tableaux et listes C# passent-ils par référence ou par valeur ?

Les tableaux et listes C# passent-ils par référence ou par valeur ?

Barbara Streisand
Libérer: 2025-01-10 10:07:41
original
869 Les gens l'ont consulté

Do C# Arrays and Lists Pass by Reference or by Value?

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal