2011-01-06 13 views
6

¿Puede alguien decirme por favor la diferencia entre DictionaryBase y genérico Dictionary<TKey, TValue>, excepto que DictionaryBase es una clase abstracta! Ambos están fuertemente tipados y leí en alguna parte que las clases genéricas son mejores que las no genéricas en rendimiento y deberían ser preferidas, entonces, ¿cuál es el uso exacto de DictionaryBase? ¡Ambas clases son casi iguales!Diferencia entre DictionaryBase y Dictionary <Tkey,Tvalue>

Cualquier tipo de ayuda será apreciada

Gracias

Respuesta

3

Dictionarybase es una clase base que implementa la interfaz IDictionary no genérica mientras que Dictionary es la versión genérica de un diccionario que implementa la interfaz IDictionary genérica. El uso de medicamentos genéricos es preferible a los medicamentos no genéricos.

creo que esto sería más útil When to use generics?

El uso de colecciones genéricas generalmente se recomienda, debido a que adquiera el beneficio inmediato de la seguridad de tipos sin tener que derivar de un tipo de colección base y poner en práctica específica del tipo miembros. Los tipos de colección genéricos generalmente también funcionan mejor que los tipos de recopilación no genéricos (y mejores que los tipos de tipos base no genéricos) cuando los elementos de colección son tipos de valor, porque con genéricos no es necesario marcar elementos.

también pasan por, Introduction to Generics

clases y métodos genéricos combinar reutilización, la seguridad de tipos y eficiencia de una manera que sus homólogos no genéricos no pueden. Los genéricos se usan con mayor frecuencia con colecciones y los métodos que operan en ellos. La versión 2.0 de la biblioteca de clases de .NET Framework proporciona un nuevo espacio de nombres, System.Collections.Generic, que contiene varias clases nuevas de colecciones genéricas. Se recomienda que todas las aplicaciones destinados a .NET Framework 2.0 y luego usar esos nuevas clases de colección genéricos en lugar de los de más edad no genéricos homólogos

+0

Ambas clases están fuertemente tipadas ... y también se derivan de la interfaz. Excepto DictionaryBase todas las clases en System.Collections, ¡supongo que no son específicas del tipo! Por lo tanto, solo queda la diferencia de que derivan de diferentes interfaces y que DictionaryBase es una clase abstracta. – Batrickparry

+0

¿No deberían las contrapartes de clases genéricas en clases no genéricas hacerse obsoletas, entonces !!!!! – Batrickparry

+0

El IDictionary genérico es una versión genérica del IDictionary no genérico. Los genéricos promueven la seguridad y la eficacia del tipo. –

5

La razón por la que los tipos de colección no genéricas se encuentran todavía en el marco .NET es en gran parte por razones de compatibilidad. En general, debe usar los tipos de colecciones genéricas siempre que sea posible.

+1

Por lo tanto, no hay un uso real de DictionaryBase debido a la presencia de Diccionario genérico! – Batrickparry

+0

Efectivamente, sí. –

+0

Gracias Adam ... :) – Batrickparry

0

simplemente terminé convertir un viejo DictionaryBase clase que estaba a IXmlSerializable genérico Dictionary(string, string).

La diferencia más dolorosa es que para el genérico Dictionary<string, string>, cuando llamo al this[key] para obtener una clave que no existe, aparece una excepción que indica que la clave no existe.

En un DictionaryBase vuelvo null sin excepción. Esto fue doloroso en mi caso porque el sistema estaba lleno de código que no verificaba que el diccionario ContainsKey antes de tratar de obtener el valor de las claves. Me resultó más doloroso asumir que cometí un error con la serialización.

Cuestiones relacionadas