다음을 통해 공유


ref(C# 참조)

ref 키워드를 사용 하면 인수를 참조로, 않은 값으로 전달 되어야 합니다.메서드 매개 변수 변경 내부 인수 변수 호출 메서드에 반영 됩니다 참조에 의해 전달 됩니다.참조 매개 변수의 값 기본 인수 변수의 값은 항상 같습니다.

[!참고]

참조에 의한 전달 개념을 참조 형식 개념과 혼동하지 마십시오.두 개념은 같지 않습니다.값 형식이든, 참조 형식이든 관계없이 ref로 메서드 매개 변수를 수정할 수 있습니다.참조에 의해 전달되는 경우에는 값 형식의 boxing이 없습니다.

사용 하는 ref 메서드 정의와 호출 하는 메서드 매개 변수를 명시적으로 사용 해야 합니다에 ref 키워드를 다음 예제와 같이.

    class RefExample
    {
        static void Method(ref int i)
        {
            // Rest the mouse pointer over i to verify that it is an int.
            // The following statement would cause a compiler error if i
            // were boxed as an object.
            i = i + 44;
        }

        static void Main()
        {
            int val = 1;
            Method(ref val);
            Console.WriteLine(val);

            // Output: 45
        }
    }

에 전달 되는 인수는 ref 매개 변수를 전달 하기 전에 초기화 해야 합니다.이 점에서 out 매개 변수에 해당 인수를 전달 하기 전에 명시적으로 초기화할 필요가 없습니다.자세한 내용은 out을 참조하십시오.

클래스의 구성원만 다른 서명을 사용할 수 없습니다 ref 및 out.두 멤버는 형식의 차이점 중 하나 이면에 있는 컴파일러 오류가 발생 한 ref 매개 변수를 사용 하 고 다른가 out 매개 변수.다음 코드 예를 들어, 컴파일 되지 않습니다.

class CS0663_Example
{
    // Compiler error CS0663: "Cannot define overloaded 
    // methods that differ only on ref and out".
    public void SampleMethod(out int i) { }
    public void SampleMethod(ref int i) { }
}

그러나 방법 중 하나 있을 때 오버 로드할 수 있습니다를 ref 또는 out 매개 변수를 사용 하 고 다른가 값 매개 변수를 다음 예제와 같이.

    class RefOverloadExample
    {
        public void SampleMethod(int i) { }
        public void SampleMethod(ref int i) { }
    }

서명 일치를 숨기 거 나 재정의 같은 필요한 다른 상황에서 ref 및 out 는 서명의 일부 이며 서로 일치 하지 않습니다.

속성은 변수가 아닙니다.방법 이므로 전달할 수 없습니다 ref 매개 변수입니다.

배열을 전달하는 방법에 대한 자세한 내용은 ref 및 out을 사용하여 배열 전달(C# 프로그래밍 가이드)을 참조하십시오.

사용할 수 없습니다의 ref 및 out 다음 종류의 방법에 대 한 키워드:

  • 비동기 메서드를 사용 하 여 정의 된 비동기 한정자입니다.

  • 포함 하는 반복기 메서드에 수익률 반환 또는 yield break 문.

예제

값 형식을 참조로 전달할 때 앞의 예제를 보여 줍니다.또한 사용할 수 있습니다에서 ref 참조 형식을 전달 하는 키워드.참조로 참조 형식을 전달 호출된 된 메서드가 참조 매개 변수를 참조 하는 개체를 수정할 수 있습니다.저장소 위치는 개체의 메서드를 참조 매개 변수의 값으로 전달 됩니다.매개 변수의 저장 위치를 변경 하는 경우 인수의 기본 저장 위치를 변경 합니다.참조 형식의 인스턴스를 전달 하는 다음 예제는 ref 매개 변수입니다.참조 형식은 값 또는 참조로 전달 하는 방법에 대 한 자세한 내용은 참조 형식 매개 변수 전달(C# 프로그래밍 가이드).

class RefExample2
{
    static void ChangeByReference(ref Product itemRef)
    {
        // The following line changes the address that is stored in  
        // parameter itemRef. Because itemRef is a ref parameter, the
        // address that is stored in variable item in Main also is changed.
        itemRef = new Product("Stapler", 99999);

        // You can change the value of one of the properties of
        // itemRef. The change happens to item in Main as well.
        itemRef.ItemID = 12345;
    }

    static void Main()
    {
        // Declare an instance of Product and display its initial values.
        Product item = new Product("Fasteners", 54321);
        System.Console.WriteLine("Original values in Main.  Name: {0}, ID: {1}\n",
            item.ItemName, item.ItemID);

        // Send item to ChangeByReference as a ref argument.
        ChangeByReference(ref item);
        System.Console.WriteLine("Back in Main.  Name: {0}, ID: {1}\n",
            item.ItemName, item.ItemID);
    }
}

class Product
{
    public Product(string name, int newID)
    {
        ItemName = name;
        ItemID = newID;
    }

    public string ItemName { get; set; }
    public int ItemID { get; set; }
}

// Output: 
//Original values in Main.  Name: Fasteners, ID: 54321

//Back in Main.  Name: Stapler, ID: 12345

C# 언어 사양

자세한 내용은 C# 언어 사양을 참조하십시오. 이 언어 사양은 C# 구문 및 사용법에 대한 신뢰할 수 있는 소스입니다.

참고 항목

참조

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

메서드 매개 변수(C# 참조)

C# 키워드

개념

C# 프로그래밍 가이드

기타 리소스

C# 참조