C# Language Passage par référence en utilisant le mot-clé ref.


Exemple

De la documentation :

En C #, les arguments peuvent être transmis aux paramètres par valeur ou par référence. Le passage par référence permet aux membres de la fonction, aux méthodes, aux propriétés, aux indexeurs, aux opérateurs et aux constructeurs de modifier la valeur des paramètres et de conserver cette modification dans l'environnement appelant. Pour transmettre un paramètre par référence, utilisez le mot-clé ref ou out .

La différence entre ref et out est que out signifie que le paramètre passé doit être assigné avant que la fonction ends.in change les paramètres passés avec ref peuvent être modifiés ou laissés inchangés.

using System;

class Program
{
    static void Main(string[] args)
    {
        int a = 20;
        Console.WriteLine("Inside Main - Before Callee: a = {0}", a);
        Callee(a);
        Console.WriteLine("Inside Main - After Callee: a = {0}", a);
        
        Console.WriteLine("Inside Main - Before CalleeRef: a = {0}", a);
        CalleeRef(ref a);
        Console.WriteLine("Inside Main - After CalleeRef: a = {0}", a);
     
        Console.WriteLine("Inside Main - Before CalleeOut: a = {0}", a);
        CalleeOut(out a);
        Console.WriteLine("Inside Main - After CalleeOut: a = {0}", a);
        
        Console.ReadLine();
    }

    static void Callee(int a)
    {
        a = 5;
        Console.WriteLine("Inside Callee a : {0}", a);
    }

    static void CalleeRef(ref int a)
    {
        a = 6;
        Console.WriteLine("Inside CalleeRef a : {0}", a);
    }
    
    static void CalleeOut(out int a)
    {
        a = 7;
        Console.WriteLine("Inside CalleeOut a : {0}", a);
    }
}

Sortie :

Inside Main - Before Callee: a = 20
Inside Callee a : 5
Inside Main - After Callee: a = 20
Inside Main - Before CalleeRef: a = 20
Inside CalleeRef a : 6
Inside Main - After CalleeRef: a = 6
Inside Main - Before CalleeOut: a = 6
Inside CalleeOut a : 7
Inside Main - After CalleeOut: a = 7