Compréhension approfondie du transfert de chaînes en C#
Les chaînes en C# sont des types référence, mais cela conduit souvent à des malentendus. Cet article approfondira les subtilités du passage de chaînes et expliquera pourquoi le code suivant ne se comporte pas comme prévu :
<code class="language-csharp">class Test { public static void Main() { string test = "before passing"; Console.WriteLine(test); TestI(test); Console.WriteLine(test); } public static void TestI(string test) { test = "after passing"; } }</code>
Bien que la chaîne soit un type référence, la deuxième sortie de ce code n'a pas changé. Cela est dû à la distinction entre passer des références par valeur et passer des objets par référence.
Passer une référence par valeur signifie copier la référence elle-même, toute modification à l'intérieur de la méthode n'affectera pas la variable d'origine. Passer un objet par référence modifiera la référence elle-même et les modifications au sein de la méthode seront reflétées dans la variable d'origine.
Pour que les chaînes fonctionnent comme prévu, elles doivent être passées par référence (en utilisant le mot-clé ref
) :
<code class="language-csharp">using System; class Test { public static void Main() { string test = "before passing"; Console.WriteLine(test); TestI(ref test); Console.WriteLine(test); } public static void TestI(ref string test) { test = "after passing"; } }</code>
La sortie du code modifié est la suivante :
<code>输入:before passing 输出:after passing</code>
Ce n'est pas la même chose que modifier l'objet sous-jacent. Les chaînes en C# sont immuables et leur contenu ne peut pas être modifié. Cependant, on peut passer un objet par référence (ex : StringBuilder
) et modifier ses données :
<code class="language-csharp">using System; using System.Text; class Test { public static void Main() { StringBuilder test = new StringBuilder(); Console.WriteLine(test); TestI(test); Console.WriteLine(test); } public static void TestI(StringBuilder test) { // 注意,我们没有改变 "test" 参数的值。 // 我们改变的是它所引用的对象中的数据。 test.Append("changing"); } }</code>
La sortie de ce code est :
<code>输入: 输出:changing</code>
En résumé, comprendre la différence entre passer une référence par valeur et passer un objet par référence est crucial pour travailler avec des chaînes en C#. En adoptant des méthodes appropriées, le comportement attendu du code peut être obtenu.
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!