IEnumerable<T>
인 공동 변종 하지만 값 유형, 단지에만 참조 형식을 지원하지 않습니다. 아래 간단한 코드가 성공적으로 컴파일되었습니다.
IEnumerable<string> strList = new List<string>();
IEnumerable<object> objList = strList;
그러나에서 string
로 변경 int
하면 컴파일 오류가 발생합니다.
IEnumerable<int> intList = new List<int>();
IEnumerable<object> objList = intList;
그 이유는 MSDN에 설명되어 있습니다 .
차이는 참조 유형에만 적용됩니다. 변형 유형 매개 변수에 값 유형을 지정하면 해당 유형 매개 변수는 생성 된 생성 유형에 대해 변하지 않습니다.
나는 그 이유가 가치 유형과 참조 유형 사이의 권투 라고 언급 한 일부 질문을 검색하고 발견했습니다 . 그러나 왜 권투가 그 이유인지에 대해 많은 생각이 들지 않습니다.
공분산과 공분산이 왜 가치 유형을 지원하지 않는지, 그리고 권투가 어떻게 영향을 미치는지 간단하고 자세한 설명을 해 줄 수 있습니까?