7
votes

Paramètre de tableau en C #: Pourquoi est-ce implicitement par référence?

Supposons le code suivant, sans aucun mot clé ref code>, qui ne remplacera évidemment pas la variable passée, car elle est transmise en tant que valeur.

class ProgramIntArray
{
    public static void Test(int[] ia) // Pass by Value
    {
        ia[0] = 2; // Working as reference?
    }

    static void Main(string[] args)
    {
        int[] test = new int[] { 1 };
        ProgramIntArray.Test(test);
        Console.WriteLine(test[0]);
        Console.Read();

        // Output: 2
    }
}


0 commentaires

6 Réponses :


1
votes

Pouvez-vous imaginer passer un tableau de 2 millions d'éléments par valeur? Maintenant, imaginez que le type d'élément est décimal . Vous devrez copier sur 240 Mo 30.5175781MB de données.


0 commentaires

16
votes

Non, les tableaux sont des cours, ce qui signifie qu'ils sont des types de référence.


2 commentaires

Normalement, vous pouvez appuyer sur F12 sur n'importe quel type pour le savoir. Si la déclaration indique "classe", c'est un type de référence; Si cela indique "STRIT", c'est un type de valeur. Malheureusement, cela ne vous permet pas de faire cela avec des tableaux, qui est dommage. Donc, il vous suffit de vous rappeler que les tableaux sont des types de référence, même s'il s'agit d'un tableau de type de valeur.


Pour ajouter à ce que Timwi a dit, F12 est la touche de raccourci pour Visual Studio.




2
votes

Les tableaux ne sont pas passés par référence. Les références aux tableaux sont transmises par la valeur. S'il est nécessaire de modifier ce que la variable de variable de réseau transbordée est (par exemple pour modifier la taille de la matrice), la variable doit être transmise par référence.


0 commentaires

0
votes

Autre des types de données de base Vous ne pouvez rien transmettre d'autre chose en tant que valeur de la valeur, le tableau est la collecte de types de données de base permettant également de passer par la valeur de la collection créerait plusieurs copies de collection qui seraient mauvaises sur la performance.


1 commentaires

Les structures ne sont pas des "types de données de base" et ils sont passés par la valeur.