13.5.2 확장 메서드에서 ref를 사용할 때의 제한 사항
일반적인 확장 메서드는 모든 타입에 대해서 확장 메서드를 작성할 수 있었다. 일반적인 타입은 물론이고 타입 매개변수를 가진 타입, 타입 매개변수의 제약 조건 존재 여부도 제한 사항이 되지 않았다.
static void Method(this string target)
static void Method(this IDisposable target)
static void Method<T>(this T target)
static void Method<T>(this T target) where T : IComparable<T>
static void Method<T>(this T target) where T : struct
반면, 대상 타입에 대해 ref나 in을 사용하는 확장 메서드를 작성할 때는 반드시 대상 타입이 값 타입이어야 한다. 그리고 대상 타입에 대해 in을 사용하는 확장 메서드는 대상 타입이 타입 매개변수를 가져서도 안 된다. 다음은 유효한 예다.
static void Method(this ref int target)
static void Method<T>(this ref T target) where T : struct
static void Method<T>(this ref T target) where T : struct, IComparable<T>
static void Method<T>(this ref int target, T other)
static void Method(this in int target)
static void Method(this in Guid target)
static void Method<T>(this in Guid target, T other)