Koleksiyon<T> Liste<T> arayüzlerini ne yapmalıyım?karşı
Kodu aşağıdaki gibi görünür:
namespace Test
{
public interface IMyClass
{
List<IMyClass> GetList();
}
public class MyClass : IMyClass
{
public List<IMyClass> GetList()
{
return new List<IMyClass>();
}
}
}
Kod Analizi çalıştırdığımda aşağıdaki önerileri alıyorum.
3 CA1002 uyarı : Microsoft.Tasarım : Değişim 'Liste' 'IMyClass.() GetList' Koleksiyonu, ReadOnlyCollection veya KeyedCollection kullanmak için
Bunu nasıl telafi etmeliyim ve iyi uygulama nedir?
CEVAP
Cevap "neden" parçası olarak sorunun neden List<T>
, nedenleri geleceğini sağlama ve API basitlik değil.
Geleceği sağlama
List<T>
sınıflara göre kolayca genişletilebilir olması için tasarlanmıştır; hızlı iç uygulamalar için tasarlanmıştır. Sanal olmayan ve geçersiz kılınamaz benzeri yöntemlerden fark edeceksiniz, veAdd
/Insert
/Remove
operasyonların bir kanca vardır.
Bu demektir ki gerekirse alter davranış koleksiyonunda geleceği (örneğin reddetmek boş nesneler insanların eklemeyi deneyin, ya da gerçekleştirmek için ek iş ne zaman bu olur gibi güncelleme sınıfınızın durumu) sonra değiştirmek için gereken türde koleksiyon dönmek için bir alt sınıf, hangi olacak bir kırılma arayüzü değiştirmek (elbette değişen mantığı gibi şeyler izin vermiyor boş olabilir arayüzü değiştirmek, ama her şey gibi güncelleme iç sınıf devlet olmaz).
Böylece geri dönerken ya da bir sınıf olabilir kolayca alt gibi Collection<T>
veya bir arayüzü gibi IList<T>
, ICollection<T>
IEnumerable<T>
değiştirebilirsiniz sizin iç uygulama için farklı bir koleksiyon türü ihtiyaçlarınızı karşılamak için, olmadan Kanuna uymamak tüketiciler çünkü hala iade olarak tip bekliyor.
API Basitlik
List<T>
yararlı bir şekilde bir çok operasyonları BinarySearch
, Sort
gibi içerir. Ancak eğer bu daha sonra ortaya çıkardığınız bir koleksiyon ise listenin mantığı kontrol ve tüketiciler değil muhtemeldir. Böylece sınıf DAHİLİ olarak bu işlemler gerekebilir sınıf tüketiciler (hatta), onları aramak ister çok düşüktür.
Toplama sınıf ya da daha basit bir arayüz sunarak gibi, API kullanıcıları görmek ve bunları kullanmak için daha kolay hale üyelerinin sayısını azaltmak.
Kullanmaya ne Zaman?dizi karşı Liste&l...
Bir sınıf ad fonksiyonları karşı stati...
SVN: Liste dosyaları bir Gözden Geçirm...
Python boş bir liste oluşturmak...
Java kritik bölümlerde, senkronize ne ...