Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mencapai Gelagat Kovarian dengan Akses Berindeks dalam Koleksi .NET?
Memahami Kovarian dan Had IList
Kovarian ialah prinsip dalam pengaturcaraan di mana jenis rujukan boleh diberikan kepada pembolehubah asas atau antara muka taip. Walau bagaimanapun, ini menimbulkan dilema apabila ia melibatkan koleksi, khususnya apabila kami mempertimbangkan antara muka IList.
IList mewakili koleksi dengan akses diindeks, membolehkan kami mendapatkan semula elemen mengikut indeksnya. Malangnya, koleksi .NET terbina dalam seperti List
Penyelesaian untuk Koleksi Kovarian dengan Akses Berindeks
Walaupun pengehadan ini, terdapat cara untuk mencapai tingkah laku kovarian sambil mengekalkan akses diindeks.
1. ReadOnlyCollections (Daripada .NET 4.5 Dan Seterusnya)
IReadOnlyList
2. Pembungkus Tersuai
Jika anda memerlukan koleksi kovarian dengan akses diindeks dalam versi terdahulu .NET, anda boleh membuat kelas pembungkus. Kelas pembalut akan merangkum IList
Kod berikut menunjukkan kelas pembalut tersuai bernama 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; } }
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencapai Gelagat Kovarian dengan Akses Berindeks dalam Koleksi .NET?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!