Aracılığıyla paylaş


Genel Türlerin Yararları (C# Programlama Kılavuzu)

Generics sağlayan ortak dil çalışma zamanı ve C# dili içinde genelleştirmesi gerçekleştirilebilir ve Evrensel temel tür gelen çevrim türlerine göre önceki sürümlerinde bir sınırlama çözümü Object.Bir generic sýnýf yaratmak tarafından denkliği olan bir koleksiyon oluşturabilir derleme zamanında.

Genel olmayan koleksiyon sýnýflarýný kullanma sınırlamaları kullanan kısa bir program yazarak gösterildiği ArrayList koleksiyonu sınıf.net Framework sınıf kitaplığı.ArrayListhiçbir değişikliğe gerek olmadan herhangi bir başvuru veya değer türü depolamak için kullanılan bir çok kullanışlı koleksiyonu sınıfıdır.

// The .NET Framework 1.1 way to create a list:
System.Collections.ArrayList list1 = new System.Collections.ArrayList();
list1.Add(3);
list1.Add(105);

System.Collections.ArrayList list2 = new System.Collections.ArrayList();
list2.Add("It is raining in Redmond.");
list2.Add("It is snowing in the mountains.");

Ancak bu kullanışlı bir maliyette gelir.Eklenen başvurusu ya da değer türü bir ArrayList için örtülü olarak başvurmanıza olan Object.Maddeler değer türleri ise, bunlar listeye eklenmiş ve bunlar alındığında unboxed, bunlar Kutulu gerekir.Çevrim hem boxing ve kutulama işlemleri performansını azaltır; kutulama ve kutulamayý kaldýrmayý etkisini büyük Koleksiyonlar yineleme yapmak burada senaryolarda çok önemli olabilir.

Sınırlama derleme zamanı tür denetlemesini yetersizliği olduğunu; çünkü bir ArrayList için her şeyi çevirir Object, yolu yoktur derleme zamanında-istemci kodu aþaðýdaki gibi bir şey yapmasını önlemek için:

System.Collections.ArrayList list = new System.Collections.ArrayList();
// Add an integer to the list.
list.Add(3);
// Add a string to the list. This will compile, but may cause an error later.
list.Add("It is raining in Redmond.");

int t = 0;
// This causes an InvalidCastException to be returned. 
foreach (int x in list)
{
    t += x;
}

Mükemmel kabul edilebilir ve türdeş olmayan bir koleksiyon oluşturuyorsanız, bazen kasıtlı olsa da, dizeleri birleştirmek ve ints tek bir ArrayList bir programlama hatası olasılığı daha yüksektir ve bu hata zamanýna dek algılanacaktır değil.

İçinde 1.0 ve 1.1 sürümleri C# dilinin, genelleştirilmiş kodunda tehlikeleri önlemek.Yalnızca yazarak kendi özel Koleksiyonlar net Framework temel sınıf kitaplığı koleksiyon sınıfları.Tabii ki böyle bir sınıfın birden çok veri türü için yeniden kullanılabilir olmadığı için genelleştirmesi yararları kaybeder ve sınıf depolanacak her türü için yeniden yazmak zorunda.

Ne ArrayList ve benzer diğer sınıfların gerçekten gerek istemci kodu, örnek başına temelinde kullanmayı düşündüğünüz belirli bir veri türünü belirtmek bir yöntemdir.Yukarı çevrim için gereksinimini ortadan kaldıran T:System.Object ve aynı zamanda, derleyici tür denetimi olası hale getirecektir.Başka bir deyişle, ArrayList bir tür parametresi gerekir.Tam olarak ne Generics'e sağlamaktır.Genel olarak List koleksiyonu, N:System.Collections.Generic ad, aynı öğeler koleksiyonuna ekleme işlemi bu benzer:

// The .NET Framework 2.0 way to create a list
List<int> list1 = new List<int>();

// No boxing, no casting:
list1.Add(3);

// Compile-time error: 
// list1.Add("It is raining in Redmond.");

İstemci kodu için yalnızca eklediğiniz sözdizimi ile List karşılaştırıldığında ArrayList türü bağımsız değişken bildirimi ve örnekleme.Bu biraz daha kodlama karmaşıklık olarak yalnızca'den daha güvenli olmayan bir liste oluşturmak ArrayList, ama daha da önemli ölçüde hızlı, özellikle liste öğeleri değer türleri olduğunda.

Ayrıca bkz.

Başvuru

Genel Türlere Giriş (C# Programlama Kılavuzu)

System.Collections.Generic

Kutulama ve Kutudan Çıkarma (C# Programlama Kılavuzu)

Kavramlar

C# Programlama Kılavuzu

Diğer Kaynaklar

Koleksiyon en iyi