Passage de tableaux en paramètre

Si l'on modifie le contenu du tableau passé en paramètre à l'intérieur d'une méthode, la modification est effectuée sur la copie de l'argument et non l'argument d'origine donc le résultat n'est pas visible.

Quel est le processus qui se produit lorsque nous appelons la méthode de référence type d'argument?

Voici le code échantillon de ce que je veux demander

      using System;

namespace Value_Refrence_Type
{
    class Program
    {
        public static void Main()
        {
            int[] callingarray = { 22, 200, 25485 };
            abc(callingarray);
            Console.WriteLine("This is callingarray");
            foreach (int element in callingarray)
                Console.WriteLine(element);
        }



        //method parameter
        static void abc(int[] calledarray)
        {
            Console.WriteLine("Method Called--------");
            foreach (int element in calledarray)
                Console.WriteLine(element);

            //Here on changing the value of elements of calledarray does't afftect the value of element of callingarray
            //if both refrences to same memory location then the value needs to change, which is not happening here
            calledarray = new int[] {55, 54, 65};
            foreach (int element in calledarray)
                Console.WriteLine(element);
        }

    }
}
des tableaux ou tout autre objet ne sont pas passés par référence. Tous les objets en C# sont passés par valeur par défaut. De passage par référence, vous devez utiliser le ref ou out mot-clé. Vous semblez être source de confusion types de référence avec l'argument de passage.
encore une fois, vous confondez le comportement d'un type de référence transmis par valeur avec passage d'argument par référence. Lorsque le passage par référence, vous pouvez attribuer un nouveau tableau à l'argument et il va changer la variable à la callsite qui n'est clairement pas le cas dans le code que nous sommes en train de discuter. Encore une fois, c'est très simple, pour passer un argument par référence, vous devez utiliser des mots-clés ref ou out, sinon il sera passé par valeur. Je vous suggère de lire les domaines connexes de la C# spécifications si vous n'êtes toujours pas convaincu.
drôle que vous le point à ma propre réponse. Je vois que vous êtes pas convaincu, donc je vais citation MSDN ici: "(...) Pour passer un paramètre par référence, utiliser la ref ou mot-clé. (...)".
Non, je vois un paramètre est passé par valeur qui signifie que la variable est copiée. Parce que la variable contient un type de référence, la référence est copiée et la pointer vers le même objet. Mais ce n'est pas le passage d'un paramètre par référence. Passage d'argument par référence exige d'utiliser la ref mot-clé et il vous permet de changer à la callsite le valeur de la variable d'origine, c'est ce que je pouvais dire a = null et le retour à la callsite la variable serait null lorsque le renvoi de la méthode. Essayez, dans votre exemple, et de voir comment il fonctionne. De nouveau, il suffit de lire le lien dans ma réponse précédente.
Ce n'est pas problématique dans les conversations entre les personnes qui ont réellement comprendre ce qui se passe derrière les coulisses, mais pour ceux qui ne comprennent pas ce qui se passe réellement, comme nicomp, il crée un sévèrement incorrect modèle mental de ce qui se passe, qui résultats dans le programme de ne pas se comporter comme ils s'attendent à parce qu'ils pensent qu'ils sont la transmission de valeurs par référence quand ils ne le sont pas. Si le passage d'une référence par la valeur et une valeur par référence, en réalité, a la même sémantique, puis la différenciation entre eux ne serait pas important, mais ils ne pas ont le même comportement.

OriginalL'auteur mdadil2019 | 2016-05-28