ホームページ > バックエンド開発 > C++ > C# メソッドで文字列を変更しても元の文字列が変更されないのはなぜですか?また、変更するにはどうすればよいですか?

C# メソッドで文字列を変更しても元の文字列が変更されないのはなぜですか?また、変更するにはどうすればよいですか?

DDD
リリース: 2025-01-24 07:01:09
オリジナル
630 人が閲覧しました

Why Doesn't Modifying a String in a C# Method Change the Original String, and How Can I Make It?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート