2014-10-12 7 views
-3

out 변수 참조는 할당되지 않은 변수의 주소로 초기화 될 수 있지만 ref 변수는이를 수행 할 수 없으므로 outref보다 좋습니다. 그렇다면 ref의 필요성은 무엇입니까?아웃 & ref 모두 왜?

+1

정답은 "그것이 맞다"입니다. 그것은 '외출'의 정의입니다. – Mephy

+0

@Mephy 그리고 여전히 5 명이 모여 대답을했습니다. – mihai

+0

@Mephy no offens, out 매개 변수의 동작을 정의하는 링크를 전달해주십시오. –

답변

1

문제는 out 매개 변수가 함수가 종료되기 전에 초기화되거나 할당되어야하기 때문입니다. 기본적으로 변수를 설정하는 것을 잊지 마십시오.

static void Method(out int pointer) 
{ 
    pointer = 5; //Initialize or assign to fix the error 
} 
0

확인이 링크 :

C# Out Vs Ref

아이디어는 당신이 무엇을하고 있는지 남아는 전달하기 전에 초기화하여 심판 유형에 대한 정확하지만 대한 호출 방법은 반환

전에 값을 할당 할 필요가 밖으로

main 메서드에서 할당을 제거한 다음 Ref를 사용하면 차이가 발생하여 다시 컴파일 오류가 발생합니다.

+0

깨진 링크처럼 보입니다. –

1

필자가 알기로, out 매개 변수는 호출되는 메서드에 의해 설정되고 메서드로 전달되지 않습니다. 당신은 당신이 차이점에 대해 알고 있는지 말했듯이

class Program 
{ 
    static void Main(string[] args) 
    { 
     int integer; 
     Method(out integer); 

     // integer is now 9 
    } 

    static void Method(out int pointer) 
    { 
     ... 
     pointer = 9; 
    } 
} 

// Option 2: 

class Program 
{ 
    static void Main(string[] args) 
    { 
     int integer = 9; 
     Method(integer);    
    } 

    static void Method(int pointer) 
    {    
     //Do something with pointer = 9 
    } 
} 
4

따라서 나는 당신이 또한 밖으로 인수가 할당되어야합니다 사실을 알고 있다고 가정입니다 :

그래서이 유효 할 것이다.

따라서 왜 아웃 인수를 할당해야하는지 알고 싶습니다.

키워드 - 이것은 출력하기 위해이 인수를 사용하고 있음을 의미합니다.

을 고려해보십시오. int add (int x, inty). 이 메소드가 아무것도 돌려주지 않는 경우는 동작합니다. 여기서도이 메소드가 정수를 반환하는 계약을 선언합니다. 마찬가지로 out 키워드의 경우 out 변수가 할당되고 출력으로 제공되는 계약을 정의합니다.

왜 업데이트해야합니까? 명시 적으로 out 인수로 표시했기 때문에 값을 할당하고 반환 할 것입니다. 우리가 배정 할 것이없는 시나리오가 있고 우리가 여전히 논쟁을 사용하고 있다면 우리는 디자인 문제가 있다는 것을 확신합니다.

ref 키워드 : - 참조를 전달한다는 의미입니다. 그것은 당신이 그것을 할당하고 어떤 결과물을 제공한다는 것을 의미하지 않습니다. 그런 식으로 사용할 수는 있지만 계약이 아닙니다. 당신은 논쟁에 대한 참고 문헌을 가지고 있고 그것으로 무엇이든 할 수 있습니다. C#에서 인수는 기본적으로 값으로 전달됩니다. ref 키워드는 참조로 인수를 전달하는 방법을 제공합니다.

ref 키워드 here에 대한 자세한 정보를 얻을 수 있습니다.

희망이 도움이 될 것입니다.그냥 패스 참조로 함수에 매개 변수를 원하는 경우

1

, 당신은 ref을 사용해야합니다

class Program 
{ 
    static void Main(string[] args) 
    { 
     int integer = 9; 
     Method(ref integer); 
    } 

    static void Method(ref int pointer) 
    { 
    } 
} 

이것은 일반적으로 컴파일됩니다.