2011-01-06 22 views
6

DictionaryBase, DictionaryBase'un soyut bir sınıf olması haricinde, bana DictionaryBase ve jenerik Dictionary<TKey, TValue> arasındaki farkı söyler misiniz? Her ikisi de güçlü bir şekilde yazılmıştır ve genel sınıfların performansta jenerik olmayanlardan daha iyi olduğunu ve tercih edilmesinin gerektiğini okudum, o zaman DictionaryBase'un tam kullanımı nedir? Her iki sınıf da neredeyse aynı!DictionaryBase ve Dictionary Arasındaki Fark <Tkey,Tvalue>

yardım her türlü

Teşekkür

cevap

3

Dictionarybase, jenerik IDictionary arabirimini uygulayan bir sözlüğün genel sürümü iken, genel olmayan IDictionary arabirimini uygulayan temel sınıftır. Jeneriklerin kullanımı jenerik olmayanlara göre tercih edilir. Bir taban toplama türünden türetmek ve türe özel uygulamaya gerek kalmadan tipi emniyet öncelikli ihtiyaçlarını kazanmak çünkü

Ben, jenerik koleksiyonları kullanma When to use generics?

genellikle tavsiye edilir bu daha yararlı olacağını düşünüyorum üyeler. Genel toplama türleri de, genel olarak, çünkü jenerik ile değer türleridir toplama elemanları, kutu gerek yoktur (generic olmayan baz toplama türlerinden türetilen türlerinden daha ve daha iyi), karşılık gelen generic olmayan toplama tiplerine göre daha iyi performans elementler.

Ayrıca geçmesi, Introduction to Generics

Jenerik sınıflar ve yöntemler bir şekilde tekrar kullanılabilirliği, tip güvenliği ve verimliliği birleştiren onların olmayan jenerik meslektaşları olamaz. Genel bilgiler, koleksiyonlarda ve üzerlerinde çalışan yöntemleriyle kullanılır. .NET Framework sınıf kitaplığının 2.0 sürümü, birkaç yeni jenerik tabanlı toplama sınıfı içeren yeni bir ad alanı System.Collections.Generic sağlar. Daha sonra .NET Framework 2.0 ve hedef tüm uygulamalar yerine ben sadece IXmlSerializable eski bir DictionaryBase sınıf dönüştürme bitmiş

+0

Her iki sınıf da güçlü bir şekilde yazılmıştır .. ve aynı zamanda arayüzden türetilmiştir. System.Bollections'daki DictionaryBase dışındaki tüm sınıflar hariç, sanırım türe özgü değil! Dolayısıyla, fark sadece farklı arayüzlerden türedikleri ve DictionaryBase'in soyut bir sınıf olduğudur. – Batrickparry

+0

Genel olmayan sınıflardaki jenerik sınıfların muadilleri yapılmamalıdır; – Batrickparry

+0

Genel IDictionary, genel olmayan IDictionary'nin genel bir sürümüdür. Jenerikler tip güvenliği ve verimliliği arttırır. –

5

olmayan jenerik koleksiyon tipleri .NET framework hala nedeni büyük oranda geriye dönük uyumluluk içindir mutluluk duyacağız. Genel olarak mümkünse genel koleksiyon türlerini kullanmalısınız.

+1

Yani, Generic Dictionary'in varlığı nedeniyle DictionaryBase'in gerçek kullanımı yok! – Batrickparry

+0

Etkin olarak, evet. –

+0

Teşekkürler Adam .. :) – Batrickparry

0

eski olmayan jenerik muadillerinin yeni jenerik koleksiyon sınıflarını kullanmanız önerilir jenerik Dictionary(string, string).

En büyük fark, mevcut olmayan bir anahtar için this[key]'u aradığımda, genel Dictionary<string, string> için anahtarın mevcut olmadığını belirten bir istisna almamdır.

DictionaryBase üzerinde, hiçbir istisna olmaksızın null'a geri dönüyorum. Bu benim durumumda acı vericiydi çünkü sistem, anahtarın değerini almaya çalışmadan önce, sözlüğün ContainsKey olduğunu kontrol etmeyen bir kod doluydu. Seri hale getirme ile bir şeyleri karıştırdığımı farz edersem, benim için daha acı verici oldu.

İlgili konular