>백엔드 개발 >C++ >컬렉션의 인덱스 지원을 통해 어떻게 공분산을 달성할 수 있습니까?

컬렉션의 인덱스 지원을 통해 어떻게 공분산을 달성할 수 있습니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-28 19:04:15147검색

How Can I Achieve Covariance with Index Support in Collections?

인덱스 지원을 통한 컬렉션의 공분산

컬렉션의 공분산을 통해 파생 항목을 기본 유형에 대해 선언된 컬렉션에 저장할 수 있습니다. 그러나 기본 공변 컬렉션인 IEnumerable에는 인덱스 지원이 부족합니다.

질문자가 지적했듯이 List IList<동물> 원래 List에서는 허용되지 않는 Dog가 아닌 동물의 추가를 허용할 수 있습니다. collection.

가능한 솔루션

.NET 4.5부터 IReadOnlyList 및 IReadOnlyCollection 공변적 동작과 인덱스 조회를 모두 제공합니다. 그러나 읽기 전용입니다.

공변 래퍼 생성

인덱스 지원이 포함된 쓰기 가능한 컬렉션이 필요한 경우 IList<를 래핑하는 확장 메서드를 생성할 수 있습니다. ;T> 원하는 공분산을 제공하는 메서드의 하위 집합만 노출합니다.

public static class Covariance
{
    public static IIndexedEnumerable<T> AsCovariant<T>(this IList<T> tail)
    {
        return new CovariantList<T>(tail);
    }
    private class CovariantList<T> : IIndexedEnumerable<T>
    {
        // Implementation...
    }
}

이 래퍼 클래스인 CovariantList는 인덱서 및 개수 속성을 제공하는 IIndexedEnumerable를 구현합니다.

AsCovariant()를 호출하여 IList를 사용하면 인덱스 지원을 통해 공변 컬렉션을 얻을 수 있으므로 지정된 기본 유형을 유지하면서 파생 항목을 검색하고 반복할 수 있습니다.

위 내용은 컬렉션의 인덱스 지원을 통해 어떻게 공분산을 달성할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.