Rumah >pembangunan bahagian belakang >C++ >Mengapa Mengubah String dalam Kaedah C# Tidak Mengubah Rentetan Asal, dan Bagaimana Saya Boleh Membuatnya?

Mengapa Mengubah String dalam Kaedah C# Tidak Mengubah Rentetan Asal, dan Bagaimana Saya Boleh Membuatnya?

DDD
DDDasal
2025-01-24 07:01:09580semak imbas

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

Memahami Gelagat Rentetan C# dan Hantaran Rujukan

Rentetan C#, walaupun merupakan jenis rujukan, mempamerkan gelagat unik berkenaan pengubahsuaian. Kod berikut menggambarkan ini: mengubah suai rentetan dalam kaedah tidak mengubah pembolehubah rentetan asal.

<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>

Ini berlaku kerana, walaupun rentetan ialah jenis rujukan, kaedah menerima salinan rujukan rentetan (nilai laluan). Perubahan yang dibuat pada rujukan yang disalin ini tidak menjejaskan rujukan asal. Tambahan pula, rentetan dalam C# tidak boleh diubah; anda tidak boleh langsung mengubah watak mereka. Sebaliknya, memberikan nilai baharu kepada pembolehubah rentetan menghasilkan objek rentetan baharu.

Mengubah suai Rentetan dengan Rujukan

Untuk mengubah suai rentetan asal, gunakan kata kunci 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>

Menggunakan ref, kaedah terus menerima rujukan kepada pembolehubah rentetan asal. Menetapkan nilai baharu dalam kaedah mengemas kini rujukan pembolehubah asal. Ini menunjukkan tingkah laku lulus demi rujukan yang benar. Ambil perhatian bahawa walaupun dengan ref, anda masih mencipta objek rentetan baharu; rujukan hanya dikemas kini untuk menunjuk ke objek baharu ini.

Atas ialah kandungan terperinci Mengapa Mengubah String dalam Kaedah C# Tidak Mengubah Rentetan Asal, dan Bagaimana Saya Boleh Membuatnya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn