>백엔드 개발 >C++ >C# 메서드에서 문자열을 수정해도 원래 문자열이 변경되지 않는 이유는 무엇이며 어떻게 만들 수 있나요?

C# 메서드에서 문자열을 수정해도 원래 문자열이 변경되지 않는 이유는 무엇이며 어떻게 만들 수 있나요?

DDD
DDD원래의
2025-01-24 07:01:09579검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.