You are on page 1of 2

clientes.Insert(0, "02", "Cliente_02") clientes.Add("04", "Cliente_04") clientes.Insert(0, "01", "Cliente_01") For Each cliente As DictionaryEntry In clientes Console.

WriteLine("Cdigo: {0}, Nombre: {1}", cliente.Key, cliente.Value) Next Console.ReadKey() End Sub End Module

Colecciones genricas
A diferencia de las colecciones personalizadas y especializadas tratadas tratadas en los apartados anteriores, las colecciones genricas se encuentran en el namespace System.Collections.Generics ya que son colecciones con la misma funcionalidad que las colecciones no genricas pero que presentan la sustancial diferencia de que estn orientadas a almacenar un tipo de dato especfico y no un tipo object como ya vimos en los casos precedentes. De este modo, cuando se requiere un mejor rendimiento o mayor estabilidad en la aplicacin contamos con una serie de colecciones equivalentes equivalentes a las especializadas, pero que aqu se denominan colecciones genricas. Ahora, podremos definirle un tipo de dato concreto a almacenar, y no estaremos abocados a emplear el tipo object. El funcionamiento de estas colecciones genricas y las especializadas es tan idntico que puede expresarse su relacin mediante una tabla de equivalencias:

Coleccin ArrayList Queue Stack Hashtable SortedList


ListDictionary HybridDictionary OrderedDictionary SortedDictionary NameValueCollection DictionaryEntry StringCollection StringDictionary

Coleccin genrica List Queue Stack Dictionary SortedList Dictionary Dictionary Dictionary SortedDictionary Dictionary KeyValuePair List Dictionary

Como ha quedado dicho, una coleccin genrica solo puede almacenar datos de un tipo, pero dicho tipo de dato es definido por nosotros mismos al momento de declararla e instanciarla. La idea de genericidad vendra, por tanto, de entender que de antemano, ninguna de estas colecciones vendra predispuesta a almacenar un tipo de datos concreto en su interior, sino que ste debe establecerse en el mismo momento en que empecemos a usar la coleccin. Algo muy distinto a las colecciones especializadas donde se trabaja siempre con un tipo de datos preestablecido: object.

67

La diferencia para inicializar una clase genrica de una clase no genrica, es que en la primera se debe utilizar un parmetro adicional despus del nombre de la clase y entre los caracteres y si estamos usando C# o (Of Parmetro) si estamos en Visual Basic. Este parmetro debe ser un tipo de datos, que indica el tipo de datos con el que la coleccin deber operar. As las colecciones List T, que es la versin genrica del ArrayList, tambin existen las colecciones genricas StackT, QueueT y DictionaryT, entre otras que son las versiones genricas de las clases Stack, Queue y HashTable respectivamente. El hecho de que las colecciones genricas operen con un tipo de dato definido en el momento de su declaracin, las hace mucho ms eficientes, eficientes, evitando tener que realizar las operaciones ya citadas de boxing, unboxing y casting de los objetos almacenados. A la vez, los desarrolladores consiguen un mayor grado de control sobre la informacin guardada en la coleccin ya que en caso de intentar ingresar un objeto de un tipo de dato diferente al establecido en la inicializacin de la coleccin, se provoca una excepcin. Una de las utilizaciones ms comunes de genricos se basa en la implementacin y manipulacin de colecciones fuertemente tipadas. En este apartado veremos muestras de cmo trabajar con los tipos de colecciones genricas disponibles en la versin 3.5 de NET Framework: la clase Dictionary, la clase List, la clase Queue y la clase Stack. Veamos ahora las principales colecciones genricas de la tabla anterior.

Dictionary
Esta clase est diseada para almacenar valores asociados a un valor de bsqueda. Tradicionalmente se ha usado esta clase para almacenar valores con cadenas, tales como nombres, palabras clave o GUIDs, pero adems ahora podemos usar un objeto de cualquier tipo como clave y otro objeto de cualquier tipo como valor. Ahora podemos especificar la clave y el tipo del valor al mismo tiempo de la creacin del objeto usando parmetros de tipo, como se muestra en el siguiente siguiente fragmento de cdigo:

// Diccionario de Prueba Dictionary<string, int> diasMes = new Dictionary<string, int>(); diasMes[Enero] = 31; diasMes[Febrero] = 28; diasMes[Marzo] = 31; Console.WriteLine(Marzo tiene + diasMes[Marzo].ToString() + das.); das.);
En Visual Basic:

Dim diasMes As New Dictionary(Of String, Integer)() diasMes(Enero) = 31 diasMes(Febrero) = 28 diasMes(Marzo) = 31 Console.WriteLine(Marzo)
Este ejemplo crea y manipula una clase Dictionary en la que todas las claves son cadenas, y todos los valores son nmeros, almacenando el nmero de dias en cada mes.

68

You might also like