SORU
22 AĞUSTOS 2008, Cuma


Liste<BusinessObject> ya BusinessObjectCollection?

Jenerik, herkes IEnumerable uygulayan bir koleksiyon tabanı oluşturarak kendi iş nesneleri için kod koleksiyonları ki önce C#

YANİ:

public class CollectionBase : IEnumerable

ve sonra İş gereği bu Nesne koleksiyonları.

public class BusinessObjectCollection : CollectionBase

Şimdi genel listesi sınıf ile, herkes sadece yerine kullanıyor mu? İki teknik bir uzlaşma kullandığım buldum:

public class BusinessObjectCollection : List<BusinessObject>

Etrafta Listeler geçirmeden yerine kesinlikle yazılmış isimleri var, hoşuma gittiği için yapıyorum.

Nedirseninyaklaşım?

CEVAP
22 AĞUSTOS 2008, Cuma


Nedense veri yapısının saklanması ve işlevsellik açısından sınırlı bir alt kümesi sağlamak için gerekli olmadıkça, genellikle sadece doğrudan bir Listesini kullanarak kampında kaldım. Bu özellikle eğer saklama için özel bir ihtiyaç o zaman ne gerek varsa. sadece zaman kaybı çünkü.

Ancak, toplu başlatır ile C# 3.0, içeride özelliği özel koleksiyon sınıfları kullanarak desteklerdim bazı yeni durumlar vardır.

Temelde, C# 3.0 IEnumerable uygulayan herhangi bir sınıf sağlar ve bir yöntemi yeni toplu başlatıcı sözdizimini kullanmak için Ekleyin. Sözlük Ekleme yöntemi tanımlar çünkü örneğin, (K) anahtarı, V değeri) olası bir sözlük bu sözdizimini kullanarak başlatmak için:

var d = new Dictionary<string, int>
{
    {"hello", 0},
    {"the answer to life the universe and everything is:", 42}
};

Bu özellik hakkında çok şey bağımsız değişken herhangi bir sayı ile eklemek için çalışıyor olmasıdır. Bu koleksiyon, belirli örneğin,:

class c1 : IEnumerable
{
    void Add(int x1, int x2, int x3)
    {
        //...
    }

    //...
}

yani sanki başlatmak için mümkün olacaktır:

var x = new c1
{
    {1,2,3},
    {4,5,6}
}

Bu karmaşık nesneleri statik bir tablo oluşturmak istiyorsanız çok yararlı olabilir. Sadece List<Customer> kullanıyordun ve müşteri nesnelerin statik bir liste oluşturmak istedim örneğin, bunu oluşturmak gibi olurdu:

var x = new List<Customer>
{
    new Customer("Scott Wisniewski", "555-555-5555", "Seattle", "WA"),
    new Customer("John Doe", "555-555-1234", "Los Angeles", "CA"),
    new Customer("Michael Scott", "555-555-8769", "Scranton PA"),
    new Customer("Ali G", "", "Staines", "UK")
}

Eğer özel bir koleksiyon kullanırsanız, ancak, bu gibi:

class CustomerList  : List<Customer>
{
    public void Add(string name, string phoneNumber, string city, string stateOrCountry)
    {
        Add(new Customer(name, phoneNumber, city, stateOrCounter));
    }
}

Koleksiyon bu sözdizimini kullanarak başlatılamıyor:

var customers = new CustomerList
{
    {"Scott Wisniewski", "555-555-5555", "Seattle", "WA"},
    {"John Doe", "555-555-1234", "Los Angeles", "CA"},
    {"Michael Scott", "555-555-8769", "Scranton PA"},
    {"Ali G", "", "Staines", "UK"}
}

Bu onların her öğe için öğe türü adını yeniden yazın gerek çünkü her iki tür için daha kolay ve okumak için daha kolay olma avantajına sahiptir. Avantajı eğer öğe türü uzun veya karmaşık ise, özellikle güçlü olabilir.

Bu varlık, bu veri uygulaması içinde tanımlanan statik koleksiyonları ihtiyacın olursa sadece yararlı olduğunu söyledi. Uygulamalar bazı türleri, Compiler gibi, onları her zaman kullanabilirsiniz. Onlar bir veritabanından tüm verileri yüklenemedi çünkü Diğerleri, tipik veritabanı uygulamaları gibi değil.

Benim tavsiyem ya nesnelerin statik bir koleksiyon tanımlamak gerekirse, ya da toplanması uzakta saklanması gerekiyor arayüzü, özel toplama bir sınıf oluşturun. Aksi takdirde sadece List<T> doğrudan kullanırdım.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Anthony Le

    Anthony Le

    10 EKİM 2006
  • Menglong Tav

    Menglong Tav

    18 Temmuz 2010
  • xCraash

    xCraash

    6 Temmuz 2012