2010-05-27 2 views
4

.NET Framework 4.0과 그 Covariance and Contravariance in Generics의 최근 릴리스에 대해 알고 싶습니다.공변량과 Contravariance .NET 4.0의 좋은 실용적인 응용 프로그램?

참조 된 링크에서 작성된 내용을 읽었을지라도 사용해야하는 방법과 사용하지 말아야 할 내용을 파악할 수는 없습니다.

간단한 설명과 간단한 실제와 같은 코드 샘플을 보내 주시면 감사하겠습니다.

감사합니다. =)

답변

6

Eric Meijer는 Scott의 최근 Podcast 중 하나 인 Reactive Framework에 대해 Scott Hanselman과 이야기를 나누었으며 Eric이 말한 것 중 하나는 .NET 4.0에서 IEnumerable은 공변수이지만 .NET 3.5에서는 IEnumerable 아니다. 이 의미

Fruit에서 상속 Banana 객체가있는 경우, 당신은 과일 변수에 바나나를 할당 할 수 있지만 당신이 .NET 3.5을 IEnumerable 과일을 기대하는 방법에 바나나의 IEnumerable을 통과 할 수 있다는 것이다 왜냐하면 IEnumerable은 공 변하지 않기 때문입니다. 나는 바나나의 배열이있는 경우 바나나가 과일의 하위 유형이기 때문에 당신이 과일의 배열을 필요로하는 곳에, 그래서 만약 내가 후 내가있을 수

: 팟 캐스트에서

배열 바나나 그리고 당신은 그 배열을 전달 할 수 과일의 배열이 필요합니다. 이제 과일 열거 할 것으로 예상하는 경우 은 바나나 열거 형을 전달할 수 없습니다. 왜냐하면 .NET 4.0까지의 열거 형은 공변수가 아니기 때문입니다. 그래서 바나나가 특별한 과일 인 종류의 과일 일지라도 바나나 의 열량은 과일의 열거가 아니 었습니다.

+0

사실 실용적인 예는 아니겠습니까? :) – cwap

+0

@cwap : 공변 수집품을 전달할 수 있다는 것은 진정한 프로그래밍 문제입니다. 한 경우에는 컬렉션을 전달할 수 있고, 다른 경우에는 컬렉션의 각 항목을 새 컬렉션에 복사해야합니다. 실제 사례를 실제로 원한다면 팟 캐스트를 들어보십시오. Eric은 반응 프레임 워크를 디자인 할 때 이것이 왜 중요한지 자세히 설명합니다. –

+0

부여, 팟 캐스트 듣지 않았다 :) 언뜻 나는 단지 생각하지 않았다 바나나 : 과일, 실제 세계의 위대한 예 -하지만 우리는 그것이 큰 특징이라는 데 동의합니다! – cwap