C#에서는 모든 타입은 값 타입 아니면 참조 타입이다. 특히, 클래스는 언제나 참조 타입이다. 그런데, 이렇게 된다면 문제가 생기는데, 리턴값은 하나만 정의할 수 있기 때문에 여러개의 값을 돌려주고 싶을 경우에는 곤란한 상황이 발생한다. 이것을 해결하기 위해, 시그내처에 ref 키워드를 붙여주면, 해당 파라미터들은 값이 아니라 참조로서 메서드로 넘겨지게 된다.
그렇다면 out 인자는? out으로 선언된 파라미터들은, ref와 비슷하지만, 사용되기 전에 초기화된다는 점이 다르다. ref로 선언된 파라미터들은 실제로 어떤 값이 들어있는지 신경쓰지 않지만, out으로 선언된 파라미터들은, 오로지 값을 담아서 내보내는 것만이 목적일 때 유용하게 사용된다. 이런 목적의 파라미터들을 매서드 내부에서 초기화해주는 것은 성가신 작업이다.
그렇다면 out 인자는? out으로 선언된 파라미터들은, ref와 비슷하지만, 사용되기 전에 초기화된다는 점이 다르다. ref로 선언된 파라미터들은 실제로 어떤 값이 들어있는지 신경쓰지 않지만, out으로 선언된 파라미터들은, 오로지 값을 담아서 내보내는 것만이 목적일 때 유용하게 사용된다. 이런 목적의 파라미터들을 매서드 내부에서 초기화해주는 것은 성가신 작업이다.