> 백엔드 개발 > C++ > .NET Generics의 공분산, 반공변성 및 'in'/'out' 키워드는 무엇입니까?

.NET Generics의 공분산, 반공변성 및 'in'/'out' 키워드는 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2025-01-20 17:27:09
원래의
496명이 탐색했습니다.

What are Covariance, Contravariance, and the

.NET 제네릭의 공분산, 반공분산 및 "in/out"에 대한 자세한 설명

공변성과 반공변성은 .NET 일반 인터페이스 및 대리자의 디자인에서 중요한 역할을 합니다. 다양한 시나리오에서 제네릭 형식을 안전하게 바꾸는 방법을 결정합니다.

공분산과 반공분산

공분산을 사용하면 기본 유형이 "반환 값"(예: 반환 값)인 경우 기본 유형 대신 더 "파생된"(보다 구체적인) 유형을 사용할 수 있습니다. 대조적으로, 반공변성은 원래 유형이 "입력"(예: 메소드 매개변수)으로만 사용되는 경우 원래 유형 대신 더 "기본"(덜 구체적인) 유형을 사용할 수 있도록 허용합니다.

'안'과 '밖'

'in' 및 'out' 키워드는 각각 공분산(covariance)과 반공변성(contravariance)의 약어입니다. 제네릭 유형이 반환 값으로만 ​​나타나는 경우 "out"을 사용하고, 제네릭 유형이 메서드 매개 변수로만 나타나는 경우 "in"을 사용합니다.

관계 설명

List를 List로 처리할 수 없다는 기사의 예는 반공변성의 개념을 보여줍니다. 더 구체적인(파생) 유형에 쓴다는 것은 기록되는 데이터 유형이 더 구체적이어야 하기 때문에 "in" 제약 조건(반공변성)을 사용하는 것을 의미합니다.

일반 인터페이스 사용에 대한 자세한 설명

공분산과 반공분산을 더 깊이 이해하려면 다음 두 가지 일반적인 방법을 고려하세요.

<code>public Base DoSomething(int variable)
public Derived DoSomethingElse(int variable)</code>
로그인 후 복사

T를 반환하는 MyFunction(int 변수) 메서드가 있는 MyInterface 인터페이스를 가정합니다.

  • T를 수정하려면 "out"을 사용하세요. interface MyInterface<out T>는 T가 반환 유형으로만 사용될 수 있음을 나타냅니다. Derived가 Base에서 파생된 유형이기 때문에 MyInterface를 MyInterface에 할당하는 것이 유효합니다.
  • T를 수정하려면 "in"을 사용하세요. interface MyInterface<in T>는 T가 메서드 매개변수로만 사용될 수 있음을 나타냅니다. MyInterface를 MyInterface에 할당하는 것은 반공변성 규칙을 위반하므로 유효하지 않습니다.

요약

공분산, 반공분산 및 "인/아웃"의 개념을 이해하는 것은 .NET에서 제네릭을 효과적으로 사용하는 데 중요합니다. 이를 사용하면 사용법에 따라 제네릭 유형이 올바르게 대체되는지 확인하여 유형이 안전한 코드를 만들 수 있습니다.

위 내용은 .NET Generics의 공분산, 반공변성 및 'in'/'out' 키워드는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿