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é. (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(ref int i) { }
public void SampleMethod(out 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 suit :
class RefOutOverloadExample
{
public void SampleMethod(int i) { }
public void SampleMethod(ref int i) { }
}
NotesLes 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 la façon de passer des tableaux, consultez Passage de tableaux à l'aide de paramètres ref et out.
ExempleLe fait de passer les types valeur par référence (comme cela est indiqué ci-dessus) 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 RefRefExample
{
static void Method(ref string s)
{
s = "changed";
}
static void Main()
{
string str = "original";
Method(ref str);
// str is now "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.5.1.2 Paramètres de référence
Outils (masquer)
S'enregistrer
Liste des Membres
Qui est en ligne?
FAQ