entendiendo covarianza y limitaciones de ilist
covarianza es un principio en la programación donde un tipo de referencia puede asignarse a una variable de una base o interfaz tipo. Sin embargo, esto plantea un dilema cuando se trata de colecciones, específicamente cuando consideramos la interfaz ilist.
ilist representa una colección con acceso indexado, lo que nos permite recuperar elementos por su índice. Desafortunadamente, las colecciones de .NET incorporadas como List
para colecciones covariantes con acceso indexado
A pesar de esta limitación, hay formas de lograr un comportamiento covariante mientras se mantiene el acceso indexado.
1. ReadOnlyCollections (desde .NET 4.5 en adelante)
IReadonlyList
2. WRAPPER Custom
Si necesita una colección covariante con acceso indexado en versiones anteriores de .NET, puede crear una clase de envoltorio. La clase de envoltorio encapsularía una ilist
El siguiente código demuestra una clase de envoltura personalizada llamada CovariantList
public static class Covariance { public static IIndexedEnumerableAsCovariant (this IList tail) { return new CovariantList (tail); } private class CovariantList : IIndexedEnumerable { private readonly IList tail; public CovariantList(IList tail) { this.tail = tail; } public T this[int index] { get { return tail[index]; } } public IEnumerator GetEnumerator() { return tail.GetEnumerator();} IEnumerator IEnumerable.GetEnumerator() { return tail.GetEnumerator(); } public int Count { get { return tail.Count; } } } } public interface IIndexedEnumerable : IEnumerable { T this[int index] { get; } int Count { get; } }
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3