C# 공분산 및 반전 인터페이스에 대한 자세한 설명
공분산과 반공분산은 인터페이스와 참조할 수 있는 유형 간의 관계를 설명하는 데 사용됩니다. 이는 컴파일러가 다양한 유형의 변수 간 할당의 안전성을 확인하는 방법을 제어합니다.
공분산
<out T>
구문을 사용하여 인터페이스를 선언하면 이는 공변 인터페이스입니다. 이는 상속 계층 구조에서 더 높은 유형의 T에 대한 참조를 보유할 수 있음을 의미합니다. 따라서 공변 인터페이스 유형의 변수를 보다 일반적인 유형의 변수에 할당할 수 있습니다. 예를 들어 IEnumerable<Animal>
은 IEnumerable<Object>
에 안전하게 할당될 수 있습니다.
인버터
반대로 <in T>
구문을 사용하여 선언된 인터페이스는 반공변 인터페이스입니다. 상속 계층 구조에서 더 낮은 유형의 T에 대한 참조를 보유할 수 있습니다. 따라서 반공변 인터페이스 유형의 변수를 보다 구체적인 유형의 변수에 할당할 수 있습니다. 예를 들어 Action<Animal>
을 Action<Cat>
에 할당할 수 있습니다.
실습
C# 프로그래밍의 공변성과 반공변성은 다음과 같은 장점이 있습니다.
예
다음 예를 고려해 보세요.
<code class="language-csharp">interface IBibbleOut<out T> { } interface IBibbleIn<in T> { } class Base { } class Descendant : Base { } class Program { static void Main(string[] args) { // 协变示例:派生类引用可以赋值给基类引用。 IBibbleOut<Base> b = GetOutDescendant(); // 逆变示例:基类引用可以赋值给派生类引用。 IBibbleIn<Descendant> d = GetInBase(); } static IBibbleOut<Descendant> GetOutDescendant() => null; static IBibbleIn<Base> GetInBase() => null; }</code>
공분산과 반공분산이 없으면 이 예제의 코드는 유형 안전성 문제로 인해 컴파일되지 않습니다. 그러나 이러한 보호 조치를 취하면 컴파일러는 할당의 유효성을 검사하고 코드가 안전하게 실행되도록 할 수 있습니다.
위 내용은 공변성과 반공변성은 C# 인터페이스의 형식 안전성과 유연성을 어떻게 향상합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!