Comprendre l'utilisation de "ref" avec des variables de type référence en C#
Bien qu'il soit clair que le mot-clé "ref" nous permet de Si vous transmettez une référence aux variables de type valeur par valeur, sa signification avec les types de référence peut être moins apparente. Cet article explore les cas d'utilisation spécifiques de "ref" avec des variables de type référence.
Considérez la classe suivante :
public class Foo { public string Name; public Foo(string name) { Name = name; } }
Passer une variable de type référence par valeur vs. Référence :
Sans le mot-clé "ref", passer une variable de type référence (par exemple, "x") à une méthode transmet une référence, pas une copie. Cela signifie que la méthode opère sur l'objet d'origine. Par exemple :
var x = new Foo("1"); void Bar(Foo y) { y.Name = "2"; } Bar(x); // changes the Name property of the original object
Utilisation de "ref" pour modifier la référence d'une variable de type référence :
Cependant, le mot-clé "ref" avec type de référence variables a un but précis : elle nous permet de changer la référence de la variable au sein de la méthode. Par exemple :
Foo foo = new Foo("1"); void Bar(ref Foo y) { y = new Foo("2"); // creates a new object and assigns it to y } Bar(ref foo); // changes the reference of 'foo' to point to the new object
Dans ce cas, après avoir appelé "Bar(ref foo)", "foo" ne fera plus référence à l'objet d'origine mais fera référence à l'objet nouvellement créé avec la propriété Name "2 ".
Application pratique :
Cette fonctionnalité peut être utile dans les scénarios où nous souhaitons renvoyer un nouvel objet à partir d'une méthode sans devoir renvoyer explicitement la référence en tant que paramètre de sortie. Par exemple, nous pourrions créer une méthode qui recherche et renvoie le premier élément d'une liste répondant à un certain critère :
public static T FindFirst<T>(List<T> list, Func<T, bool> predicate) where T : class { foreach (T item in list) { if (predicate(item)) return item; } return null; }
Utiliser le mot-clé "ref" dans cette méthode permet d'éviter d'avoir à créer un out tout en étant capable de renvoyer l'objet trouvé.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!