답변:
ref
및 out
형식 매개 변수 정의의 일부는 내장 사용할 수없는 Func
통과 위임 ref
및 out
인수. 물론 원하는 경우 자신의 대리인을 선언 할 수 있습니다.
delegate V MyDelegate<T,U,V>(T input, out U output);
Func
대표 (또는 가족은 Action
그 문제에 대해) 아무것도하지만, 같은 선언 간단한 위임 유형 없습니다
//.NET 4 and above
public delegate TResult Func<out TResult>()
public delegate TResult Func<in T, out TResult>(T obj)
//.NET 3.5
public delegate TResult Func<T1, T2, TResult>(T1 obj1, T2 obj2)
public delegate TResult Func<T1, T2, T3, TResult>(T1 obj1, T2 obj2, T3 obj3)
등. 대리인은 out / ref 매개 변수를 가질 수 있으므로 귀하의 경우 다른 답변에서 지적한 것처럼 사용자 정의 구현 문제만이 가능합니다. Microsoft가 기본적으로 이것을 포장하지 않은 이유에 대해서는 필요한 조합의 수를 생각하십시오.
delegate TResult Func<T1, T2, TResult>(T1 obj1, T2 obj2)
delegate TResult Func<T1, T2, TResult>(out T1 obj1, T2 obj2)
delegate TResult Func<T1, T2, TResult>(T1 obj1, out T2 obj2)
delegate TResult Func<T1, T2, TResult>(out T1 obj1, out T2 obj2)
두 개의 매개 변수 만 있습니다. 우리는 만지지 않았습니다 ref
. 실제로 개발자에게는 번거롭고 혼란 스러울 수 있습니다.
delegate TResult Func<T1, T2, TResult>(T1 obj, T2 obj)
와 delegate TResult Func<T1, T2, TResult>(out T1 obj, T2 obj)
. 따라서 오버로드 수 심볼 이름 외에 Microsoft가 이러한 오버로드를 추가 할 수없는 또 다른 이유가 Func
있습니다.
T
반 변량 및V
공변량 으로 표시 할 수 있습니다 . 그러나, 사람 파라미터 (output
)의 형식이U
전달 참고로 ,U
코 또는 contravariant 표시 할 수없고, "불변"을 유지한다. 따라서public delegate V MyDelegate<in T, U, out V>(T input, out U output);
C # 4 이상을 사용하는지 고려 하십시오.