SORU
7 Kasım 2008, Cuma


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
7 Kasım 2008, Cuma


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • boniver

    boniver

    17 NİSAN 2006
  • InfinityWard

    InfinityWard

    19 EYLÜL 2006
  • Willie D.

    Willie D.

    16 Aralık 2006