다음을 통해 공유


방법: 메서드에 대한 구조체 전달과 클래스 참조 전달 간의 차이점 이해(C# 프로그래밍 가이드)

다음은 구조체를 메서드로 전달할 때는 구조체의 복사본이 전달되나 클래스 인스턴스를 전달할 때는 참조가 전달된다는 사실을 보여 주는 예제입니다.

다음 예제의 출력에서는 클래스 인스턴스가 ClassTaker 메서드로 전달될 때 클래스 필드의 값만이 변경되었음을 보여 줍니다. 그러나 구조체 필드는 인스턴스를 StructTaker 메서드로 전달해도 변경되지 않습니다. 그 이유는 ClassTaker 메서드에는 클래스에 대한 참조가 전달되는 반면 StructTaker 메서드에는 구조체의 복사본이 전달되기 때문입니다.

예제

class TheClass
{
    public string willIChange;
}

struct TheStruct
{
    public string willIChange;
}

class TestClassAndStruct
{
    static void ClassTaker(TheClass c)
    {
        c.willIChange = "Changed";
    }

    static void StructTaker(TheStruct s)
    {
        s.willIChange = "Changed";
    }

    static void Main()
    {
        TheClass testClass = new TheClass();
        TheStruct testStruct = new TheStruct();

        testClass.willIChange = "Not Changed";
        testStruct.willIChange = "Not Changed";

        ClassTaker(testClass);
        StructTaker(testStruct);

        Console.WriteLine("Class field = {0}", testClass.willIChange);
        Console.WriteLine("Struct field = {0}", testStruct.willIChange);

        // Keep the console window open in debug mode.
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }
}
/* Output:
    Class field = Changed
    Struct field = Not Changed
*/

참고 항목

참조

클래스(C# 프로그래밍 가이드)

구조체(C# 프로그래밍 가이드)

매개 변수 전달(C# 프로그래밍 가이드)

개념

C# 프로그래밍 가이드