C #에는 out
및 ref
키워드가 있습니다. 이 두 가지가 왜 필요한가요? 면책 조항 : C #에 대한 깊은 지식이 없습니다.
ref
와 out
? 또는 참조 기준 인수의 사용법 ref
/ out
값 기준 인수 와 비교하여 (파라미터의 수정 자 없음) 묻고 있습니까? 아니면 둘다?
C #에는 out
및 ref
키워드가 있습니다. 이 두 가지가 왜 필요한가요? 면책 조항 : C #에 대한 깊은 지식이 없습니다.
ref
와 out
? 또는 참조 기준 인수의 사용법 ref
/ out
값 기준 인수 와 비교하여 (파라미터의 수정 자 없음) 묻고 있습니까? 아니면 둘다?
답변:
구현 측면에서, 그것들은 본질적으로 같은 것이지만, 그렇지 않은 out
것을 전달합니다 ref
: 당신은 입력에 신경 쓰지 않습니다. 이것은 당신과 툴링에 특정한 것들을 의미합니다. 예를 들어, 초기화되지 않은 변수를 out
매개 변수에 전달하면 문제가되지 않습니다. 그렇지 않으면 문제가 아니며 함수 내에서 out
반환하기 전에 매개 변수에 값을 할당해야 하지만 아무것도 할 필요가 없습니다. 모두 ref
가치가 있습니다.
out
그것을 당신이 첫번째 장소에있는 변수를 처리하는 방법을 개선하는 일치하도록 할 수있는 방법을 제공합니다.
out
매개 변수 에 전달하는 것이 안전 합니다. .
이 두 키워드를 이해하려면 참조로 값을 전달하는 것이 무엇인지 이해해야 합니다. 본질적으로 이는 메소드 또는 함수 내에서 전달하는 매개 변수를 수정하면 함수가 종료 될 때 해당 변수 가 수정 된 값을 유지함을 의미합니다 . 매개 변수를 선언 ref
하거나 out
이를 수행하면 일반 매개 변수는 함수에서 수정하더라도 원래 값을 유지합니다.
유일한 차이점 ref
과 out
즉 out
당신이 함수로 전달하기 전에 변수를 초기화 할 필요가 없습니다, 그러나 ref
않습니다; 동안 out
수행 함수 내 변수에 뭔가를 할당 할 필요하지만, ref
하지 않습니다.
당신은 물었다.
C #에는이 두 가지가 필요한 이유가 있습니다. C #에 대한 깊이있는 지식이 없습니다. out 및 ref 매개 변수가 필요한 이유는 무엇입니까?
그리고 대답은 그것들이 필요하지 않다는 것입니다. 예를 들어, java에는 하나도없고 VB에는 ref 만 있습니다 (그리고 메소드 선언에서만 필요합니다).
어느 쪽도 사용하지 않고 전체 프로그램을 쉽게 작성할 수 있습니다.
그것들은 때때로 유용하기 때문에 존재합니다. 그렇기 때문에 둘 중 하나만있는 것이 아닙니다. '여기있는 것이 있으면 원하는대로 수정하십시오'와 '이것에 새로운 가치를 부여하십시오'를 구분하는 것이 유용하기 때문입니다.
다른 언어는 다른 우선 순위를 가지므로 이들을 포함하거나 포함하지 않을 수 있습니다. 그들은 어느 쪽이 유용한 지에 대해 의견이 맞지 않을 수 있으므로 적극적으로 구현하지 않기로 결정할 수 있습니다.
그들의 핵심에서 ref
와 out
받는 할당 -이 업데이트 될 수 있도록하는 방법에 변수의 주소를 전달하는 메커니즘을 제공 ref
하거나 out
매개 변수는 호출자의 컨텍스트에서 변수를 업데이트합니다. 그것들이 다른 곳은 보증에 있습니다 : out
변수가 업데이트되도록 보장 ref
하지 않습니다.
통화 반대편에서도 비슷한 차이점이 있습니다. out
메소드에 대한 매개 변수는 도착시 유용한 것을 포함한다고 보장하지 않으며, 어느 시점에서 값으로 설정되어야하지만, ref
매개 변수는 값을 갖는 것으로 가정 할 수 있으며 특정 조치를 취할 필요는 없습니다.
이 차이는 코드 분석, 생성 및 최적화에 영향을 미치며, 대부분의 경우 우리에게는별로 명백하지는 않지만 프로그램 운영 방식에 영향을 줄 수 있습니다. 코드 생성기는 호출 직전에 변수 할당을 연기 할 수 있으며, 옵티마이 저는 계약 등에 따라 일부 작업을보다 효과적으로 재정렬 할 수 있다고 결정할 수 있습니다.
사용법 측면에서, 일반적으로 out
변수로 매개 변수로 도착 ref
했을 때 와 내가 할 때 변수의 내용에 신경 쓰지 않는 상황에 사용 합니다 .