Sorunun neden olmasa da "neden" bölümünü yanıtlamak için List<T>
, nedenleri geleceğe hazırlayan ve API basitliğidir.
Gelecek geçirmezlik
List<T>
alt sınıflandırma ile kolayca genişletilebilecek şekilde tasarlanmamıştır; dahili uygulamalar için hızlı olacak şekilde tasarlanmıştır. Üzerindeki yöntemlerin sanal olmadığını fark edeceksiniz ve bu yüzden geçersiz kılınamaz ve Add
/ Insert
/ Remove
işlemlerinde kanca yoktur .
Bu, ileride koleksiyonun davranışını değiştirmeniz gerektiğinde (örneğin, insanların eklemeye çalıştığı boş nesneleri reddetmek veya bu durum gerçekleştiğinde sınıf durumunuzu güncellemek gibi ek işler gerçekleştirmek için), türü değiştirmeniz gerektiği anlamına gelir. toplama sınıfına dönebilirsiniz alt sınıf, ki bu bir kırılma arayüzü değişikliği olacak (tabii ki null izin vermemek gibi şeylerin anlamlarını değiştirmek de bir arayüz değişikliği olabilir, ama iç sınıf durumunuzu güncelleme gibi şeyler olmayacaktır).
Yani ya kolayca gibi sınıflandırma edilebilir bir sınıf döndürerek Collection<T>
gibi bir arayüz veya IList<T>
, ICollection<T>
ya IEnumerable<T>
da hala iade edilebilir çünkü tüketicilerin kodunu bozmadan, kendi ihtiyaçlarını karşılamak için farklı bir koleksiyon türü olmak için iç uygulanmasını değiştirebilir bekliyorlar.
API Basitliği
List<T>
gibi yararlı bir operasyon çok içerir BinarySearch
, Sort
ve böyle devam eder. Bununla birlikte, bu ortaya koyduğunuz bir koleksiyonsa, tüketicilerin değil, listenin anlambilimini kontrol etmeniz muhtemeldir. Sınıfınız dahili olarak bu işlemlere ihtiyaç duysa da, sınıfınızın tüketicilerinin onları aramak istemesi (hatta hatta yapması) pek olası değildir.
Bu nedenle, daha basit bir toplama sınıfı veya arayüzü sunarak API'nizin kullanıcılarının gördüğü üye sayısını azaltır ve kullanımlarını kolaylaştırırsınız.