C #에서는 out
키워드를 두 가지 방식으로 사용할 수 있습니다.
인수가 참조 로 전달되는 매개 변수 수정 자
class OutExample { static void Method(out int i) { i = 44; } static void Main() { int value; Method(out value); // value is now 44 } }
공분산 을 지정 하는 유형 매개 변수 수정 자 입니다.
// Covariant interface. interface ICovariant<out R> { } // Extending covariant interface. interface IExtCovariant<out R> : ICovariant<R> { } // Implementing covariant interface. class Sample<R> : ICovariant<R> { } class Program { static void Test() { ICovariant<Object> iobj = new Sample<Object>(); ICovariant<String> istr = new Sample<String>(); // You can assign istr to iobj because // the ICovariant interface is covariant. iobj = istr; } }
내 질문은 : 왜?
초보자 에게는 둘 사이의 연결 이 직관적으로 보이지 않습니다 . 제네릭을 사용하는 것은 참조로 전달하는 것과 관련이없는 것 같습니다.
나는 먼저 out
참조로 인수를 전달하는 것과 관련하여 무엇 을 배웠으며 , 이것은 제네릭과의 공분산 정의에 대한 이해를 방해했습니다.
내가 누락 된 이러한 사용 사이에 연결이 있습니까?
System.Func<in T, out TResult>
delegate 의 공분산 및 반공산 사용을 보면 연결이 약간 더 이해 될 수 있습니다 .