web-dev-qa-db-fra.com

Les tableaux ou listes sont-ils passés par défaut par référence en c #?

Est-ce qu'ils? Ou pour accélérer mon programme, dois-je les transmettre par référence?

74
Jorge Branco

référence est passé par valeur .

Les tableaux en .NET sont des objets sur le tas, vous avez donc une référence. Cette référence est passée par valeur, ce qui signifie que les modifications apportées au conten du tableau seront vues par l'appelant, mais réattribution le tableau ne:

void Foo(int[] data) {
    data[0] = 1; // caller sees this
}
void Bar(int[] data) {
    data = new int[20]; // but not this
}

Si vous ajoutez le modificateur ref, le référence est passé par référence - et l'appelant verrait soit changer ci-dessus.

189
Marc Gravell

Ils sont passés par valeur (comme tous les paramètres qui ne sont ni ref ni out), mais la valeur is une référence à l'objet, donc ils sont effectivement passés par référence.

8
plinth

Oui, ils sont passés par référence par défaut en C #. Tous les objets en C # le sont, à l'exception des types de valeur. Pour être un peu plus précis, ils sont passés "par référence par valeur"; c'est-à-dire que la valeur de la variable que vous voyez dans vos méthodes est une référence à l'objet d'origine transmis. Il s'agit d'un petit point sémantique, mais qui peut parfois être important.

0
Paul Sonier