C# の文字列の動作と参照の受け渡しを理解する
C# 文字列は、参照型であるにもかかわらず、変更に関して独特の動作を示します。 次のコードはこれを示しています。メソッド内で文字列を変更しても、元の文字列変数は変更されません。
<code class="language-csharp">class Test { public static void Main() { string test = "before modification"; Console.WriteLine(test); ModifyString(test); Console.WriteLine(test); // Still "before modification" } public static void ModifyString(string test) { test = "after modification"; } }</code>
これは、文字列は参照型であるにもかかわらず、メソッドが文字列の参照の コピー を受け取るために発生します (値渡し)。 このコピーされた参照に加えられた変更は、元の参照には影響しません。 さらに、C# の文字列は不変です。キャラクターを直接変更することはできません。 代わりに、新しい値を文字列変数に代入すると、新しい文字列オブジェクトが作成されます。
参照による文字列の変更
元の文字列を変更するには、ref
キーワードを使用します。
<code class="language-csharp">class Test { public static void Main() { string test = "before modification"; Console.WriteLine(test); ModifyString(ref test); Console.WriteLine(test); // Now "after modification" } public static void ModifyString(ref string test) { test = "after modification"; } }</code>
ref
を使用すると、メソッドは元の文字列変数への参照を直接受け取ります。 メソッド内で新しい値を割り当てると、元の変数の参照が更新されます。 これは、真の参照渡しの動作を示しています。 ref
を使用しても、新しい文字列オブジェクトを作成していることに注意してください。参照は、この新しいオブジェクトを指すように更新されているだけです。
以上がC# メソッドで文字列を変更しても元の文字列が変更されないのはなぜですか?また、変更するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。