이 결과를 살펴보면, 우리가 의도한 대로 offsetBy를 호출했을 때 vector 변수가 변경된 것을 알 수 있다.
Note ≡
OffsetBy 메서드는 변경 불가능하게 작성된 Vector3D 구조체를 마치 변경 가능한 것처럼 보이게 해준다. 이러한 기능은 아직 초기 단계이지만, 확장 메서드를 작성할 때 참조 매개변수를 사용하기보다는 in 매개변수를 사용하는 것이 좀 더 편하게 느껴진다.
첫 번째 매개변수를 in 매개변수로 선언한 확장 메서드를 호출할 때는 읽고 쓸 수 있는 변수를 이용해서 호출할 수 있다(앞의 예제에서 vector.Magnitude()를 호출한 것처럼). 하지만 첫 번째 매개변수를 참조 매개변수로 선언한 경우에는 읽기 전용 변수를 이용해서 호출할 수 없다. 예를 들어 다음과 같이 vector에 대해 읽기 전용 별칭을 생성하면, 이에 대해 OffsetBy를 호출할 수 없다.
ref readonly var alias = ref vector;
alias.OffsetBy(offset); ----- 오류: 읽기 전용 변수를 참조 매개변수에 전달하려고 함