david's daily developer note

C# ref - C# Reference 본문

[Develop] Language/C#

C# ref - C# Reference

mouse-david 2011. 4. 8. 20:28
728x90

ref 키워드는 인수를 참조로 전달하는 데 사용됩니다. 메서드의 모든 매개 변수 변경 사항은 호출하는 메서드로 제어가 다시 전달될 때 해당 변수에 반영됩니다. ref 매개 변수를 사용하려면 메서드 정의와 호출하는 메서드에서 모두 ref 키워드를 명시적으로 사용해야 합니다. 예를 들면 다음과 같습니다.

class RefExample {     
    static void Method(ref int i) {         
    	i = 44;
    }     

    static void Main() {
    	int val = 0;         
    	Method(ref val); // val is now 44     
    } 
}

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(ref int i) {  }     
    public void SampleMethod(out int i) {  } 
}

그러나 한 메서드가 ref 또는 out 인수를 사용하고 다른 메서드는 두 인수 중 어느 것도 사용하지 않는 경우 다음과 같이 오버로드할 수 있습니다.

class RefOutOverloadExample {
    public void SampleMethod(int i) {  }     
    public void SampleMethod(ref int i) {  } 
}
728x90