728x90
불변성(Invariance) - X -> Y가 가능하더라도 C<X>는 C<X>로만 사용할 수 있다. 기본적으로 제네릭은 불변이다. |
동일 타입만 사용. 상/하위 타입으로 레퍼런스 변환 불가. | interface IFoo<T> IFoo<Dog> a = new Foo<Dog>(); |
가변성(Variance) -특정 타입의 객체를 다른 타입의 객체로 변환할 수 있는 성격을 말한다. |
공변성(Covariance) - 출력/리턴 타입에 T 사용 - Dog보다 상위타입에 assign 가능 - X -> Y가 가능할 때, C<T>가 C<X> -> C<Y>로 가능하다. |
interface IFoo<out T> IFoo<Animal> a= new Foo<Dog>(); |
반공변성(Contravariance) - 입력/메서드 파라미터에 T 사용 - Animal보다 하위타입에 assign 가능 - X -> Y가 가능할 때, C<T>가 C<Y> -> C<X>로 가능하다. |
interface IFoo<in T> IFoo<Dog> a = new Foo<Animal>(); |
공변성(Covaiance)을 지원하는 대표적인 .NET 타입으로 IEnumerable<out T>, IEnumerator<out T>, IQueryable<out T>, Func<out T>등이 있다.
반공변성(Contravariance)을 지원하는 대표적인 .NET 타입으로 IComparer<in T>, IComparable<in T>, IEqualityComparer<in T>, Action<in T>등이 있다.
[출처]
https://sticky32.tistory.com/entry/C-%EA%B3%B5%EB%B3%80%EC%84%B1%EA%B3%BC-%EB%B0%98%EA%B3%B5%EB%B3%80%EC%84%B1%EC%9D%B4%EB%9E%80
http://www.csharpstudy.com/DevNote/Article/31
728x90
'C#' 카테고리의 다른 글
대소문자를 구별하지 않고 문자열 비교하는 방법 (1) | 2022.12.16 |
---|---|
@ 심벌 사용법 (0) | 2022.12.15 |
Call By Reference(값에 의한 전달) - ref, out (0) | 2022.12.15 |
Invoke와 BeginInvoke의 차이점 (0) | 2022.12.12 |
Action/Func/Predicate (0) | 2022.12.12 |