Heim >Backend-Entwicklung >C++ >Wie kann ich kovariantes Verhalten mit indiziertem Zugriff in .NET-Sammlungen erreichen?
Kovarianz und IList-Einschränkungen verstehen
Kovarianz ist ein Prinzip in der Programmierung, bei dem ein Referenztyp einer Variablen einer Basis oder Schnittstelle zugewiesen werden kann Typ. Dies stellt jedoch ein Dilemma dar, wenn es um Sammlungen geht, insbesondere wenn wir die IList-Schnittstelle betrachten.
IList stellt eine Sammlung mit indiziertem Zugriff dar, die es uns ermöglicht, Elemente anhand ihres Index abzurufen. Leider sind integrierte .NET-Sammlungen wie List
Lösungen für kovariante Sammlungen mit indiziertem Zugriff
Trotz dieser Einschränkung gibt es Möglichkeiten, dies zu erreichen kovariantes Verhalten unter Beibehaltung des indizierten Zugriffs.
1. ReadOnlyCollections (ab .NET 4.5)
IReadOnlyList
2. Benutzerdefinierter Wrapper
Wenn Sie in früheren Versionen von .NET eine kovariante Sammlung mit indiziertem Zugriff benötigen, können Sie eine Wrapper-Klasse erstellen. Die Wrapper-Klasse würde eine IList
Der folgende Code demonstriert eine benutzerdefinierte Wrapper-Klasse namens CovariantList
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> { private readonly IList<T> tail; public CovariantList(IList<T> tail) { this.tail = tail; } public T this[int index] { get { return tail[index]; } } public IEnumerator<T> GetEnumerator() { return tail.GetEnumerator();} IEnumerator IEnumerable.GetEnumerator() { return tail.GetEnumerator(); } public int Count { get { return tail.Count; } } } } public interface IIndexedEnumerable<out T> : IEnumerable<T> { T this[int index] { get; } int Count { get; } }
Das obige ist der detaillierte Inhalt vonWie kann ich kovariantes Verhalten mit indiziertem Zugriff in .NET-Sammlungen erreichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!