ref (Référence C#)

Mise à jour : novembre 2007

Le mot clé ref fait en sorte que les arguments soient passés par référence. La conséquence est que toute modification apportée au paramètre dans la méthode est reflétée dans cette variable lorsque la méthode appelante récupère le contrôle. Pour utiliser un paramètre ref, la définition de méthode et la méthode d'appel doivent toutes deux utiliser le mot clé ref explicitement. Par exemple :

class RefExample
{
    static void Method(ref int i)
    {
        i = 44;
    }
    static void Main()
    {
        int val = 0;
        Method(ref val);
        // val is now 44
    }
}

Un argument passé à un paramètre ref doit être initialisé en premier lieu. Cela est différent de out, dont l'argument n'a pas besoin être initialisé explicitement avant d'être passé. Pour plus d'informations, consultez out.

Bien que ref et out soient traités différemment au moment de l'exécution, ils sont traités de la même façon au moment de la compilation. Par conséquent, les méthodes ne peuvent pas être surchargées si une méthode prend un argument ref et l'autre un argument out. Par exemple, ces deux méthodes sont identiques en termes de compilation, donc le code suivant ne compilera pas :

class CS0663_Example
{
    // Compiler error CS0663: "Cannot define overloaded 
    // methods that differ only on ref and out".
    public void SampleMethod(out int i) { }
    public void SampleMethod(ref int i) { }
}

Toutefois, la surcharge peut survenir si une méthode prend un argument ref ou out et si l'autre n'utilise ni l'un ni l'autre, comme dans l'exemple suivant :

class RefOverloadExample
{
    public void SampleMethod(int i) { }
    public void SampleMethod(ref int i) { }
}

Les propriétés ne sont pas des variables et par conséquent ne peuvent pas être passées en tant que paramètres ref.

Pour plus d'informations sur le passage de tableaux, consultez Passage de tableaux à l'aide de paramètres ref et out (Guide de programmation C#).

Exemple

Le fait de passer les types valeur par référence (comme indiqué plus haut dans cette rubrique) est utile, mais ref est également utile pour passer des types référence. Cela permet aux méthodes appelées de modifier l'objet auquel la référence fait référence, car la référence elle-même est passée par référence. L'exemple suivant illustre que lorsqu'un type référence est passé en tant que paramètre ref, l'objet lui-même peut être modifié.

class RefExample2
{
    static void Method(ref string s)
    {
        s = "changed";
    }
    static void Main()
    {
        string str = "original";
        Method(ref str);
        Console.WriteLine(str);
    }
}
// Output: changed

Spécification du langage C#

Pour plus d'informations, consultez les sections suivantes dans Spécifications du langage C#.

  • 5.1.5 Paramètres de référence

  • 10.6.1.2 Paramètres de référence

Voir aussi

Concepts

Guide de programmation C#

Référence

Passage de paramètres (Guide de programmation C#)

Paramètres de méthode (Référence C#)

Mots clés C#

Autres ressources

Référence C#