본문 바로가기
C#

[C#] 공변성, 반공변성

by 소리쿤 2023. 4. 4.

X가 Y가 될 수 있다면, F(X)도 F(Y)가 될 수 있다 > 공변성
X가 Y가 될 수 있다면, F(Y)가 F(X)가 될 수 있다 > 반공변성
 
이다. 
 
인터페이스, 델리게이트에만 달 수 있는 제약조건임
 
https://edykim.com/ko/post/what-are-covariance-and-contravariance/

공변성과 반공변성은 무엇인가?

Stephan Boyer의 What are covariance and contravariance?을 번역한 글이다. 공변성과 반공변성은 무엇인가? 서브타이핑은 프로그래밍 언어 이론에서 까다로운 주제다. 공변성과 반공변성은 오해하기 쉬운 주

edykim.com

위는 이해할 때 도움이 된 글임
 
요약하면, 
 
1. 함수 타입에서 반환 타입은 공변적(covariant) 이고, 인자 타입은 반공변적(contravariant) 이다.
2. 컬렉션이 불변이면 공변적(covariant) 이다.

그러니까 이 경우엔 너도 지원해라 이거인 듯

 

IEnumerable은 불변, List는 가변이기 때문에...
List는 공변성 지원 안 함
IEnumerable은 공변성 지원함

 
 

이것도 일반 제네릭으론 안되는데 Action은 되는 이유는...
Action 등의 델리게이트는 반공변성을 지원하기 때문
얘네도 마찬가지, 인자 타입은 반공변, 반환 타입은 공변이다.

 
 

'C#' 카테고리의 다른 글

[C#] ThreadLocalStorage?  (0) 2023.04.06
[C#] ReadWriteLock 구현  (0) 2023.04.05
[C#] SpinLock 구현  (0) 2023.03.29
[C#] IComparable과 IComparer  (0) 2023.03.26
[C#] Dispose 패턴  (0) 2023.03.23