Hablando de Generics...

¿Qué tal?

Hablando de Generics… Hacía tiempo que prometí poner un post sobre generics.

Quisiera empezar por dar una introducción rápida al concepto de generics. Generics que en español quiere decir Genérico, y a eso se refiere el concepto; a tipos genéricos. Generics se aplica a tres de los cinco tipos del .NET Framework, se aplica a class, interface y delegate, lo cual excluye a enum y a estruct. Generics es un término utilizado para referirce a la creación de tipos genéricos,  pero ¿qué es en sí un tipo genérico?, bueno, pensemos en un tipo genérico como un tipo que pude trabajar con cualquier tipo de datos sin necesidad de volverlo a escribir, así como las herramientas aquellas que tienen varios tipos de desarmadores, pero con un solo maneral.

 Por ejemplo, supongamos que tenemos una clase que comúnmente hemos tenido que reescribir para que pueda trabajar con números, con caracteres o con cualquier otro tipo de dato, se tiene la misma funcionalidad solo que se tiene que reescribir para utilizar el tipo de datos en específico, ahora pensemos en la ventaja que nos ofrecería una clase genérica, a la cual le indicáramos el tipo de dato con el que va a trabajar, ya no tendríamos que tener una clase para cada tipo de datos, un ejemplo real son las colecciones y arreglos, por ejemplo, la clase List, que está diseñada para trabajar con tipos de dato Object, lo cual no ofrece mucho rendimiento al momento de utilizarla, ya que tenemos que convertir los datos cada vez que se toma un elemento de la lista y puede dejar lugar a errores de ejecución si los tipos de datos de los elementos que contiene no corresponden en alguna operación.

Ahora bien, pensemos que esa lista va a ser para números, y como tal se utiliza para almacenar números, pero…  si en un momento dado llegase a pasar una letra a la lista, no habría problema, esto es, al ser todos los elementos de la lista del tipo Object, entonces cualquier cosa puede ser almacenada en ella y los problemas vendrían al utilizar los elementos, pues es obvio que se esperan números pero no se tiene la certeza de que lo que haya en la lista sea totalmente números.

Aquí es donde cobra sentido el uso de Generics, pues podríamos pensar en una lista que pudiera contener tipos numéricos como int, float, etc. O bien contener tipos de datos en específico como DataRow, String, etc. Para esto, en el .NET  framework 2.0 se ha incluido dentro del namespace System.Collections.Generics, una variedad de colecciones genéricas, en las que se encuentra List, denominada System.Collections.Generics.List<>. La manera de utilizarla es simple, y de igual manera pueden utilizarse las demás clases de ese namespace.

El objetivo de utilizar una colección o arreglo genérico es para asegurar la inflexión de tipos, esto es, que solo se agreguen elementos del tipo de dato que está definido en el parámetro de tipo. Una vez que se define el tipo de dato en el parámetro de tipo, el arreglo tomará ese tipo como el tipo de los elementos que se agregarán. Por cierto, el parámetro de tipo es dónde se coloca el tipo de dato que utilizará la el tipo genérico.

Para terminar quiero dejarles un ejemplo de esto, no duden que será útil ya que en lo que nos depara el futuro para la liberación de ORCAS, el tema de generics será un tema común y si no lo empezamos a conocer… pues sí nos dará dificultades.

En este ejemplo simplemente quiero mostrar la manera simple de utilizar una lista genérica.

    //Declaración de una variable List genérica

    System.Collections.Generic.List<int> lstNumeros;

    //Instancia de la variable

    lstNumeros = new System.Collections.Generic.List<int>();

    //Agregar elementos a la lista

    lstNumeros.Add(123);

    //Agregar elementos que no sean del tipo int

    //ocasionará un error al compilar

    lstNumeros.Add("Hola"); //<--error

    //Recuperar un elemento en una variable

    //Notese que no es necesario convertirlo

    int NumA = lstNumeros[0];

 

    int TotalSuma;           

    //Uso de foreach con los elementos

    //notese que se usa directamente el tipo de dato

    foreach (int n in lstNumeros)

    {

        TotalSuma += n;

    }

Bueno… pues espero que les sea de utilidad

Saludos…

Octavio Telis

Published Friday, April 06, 2007 12:46 AM by Octavio Telis Aynés
Filed under: , ,

Comments

# re: Hablando de Generics...

Tuesday, April 15, 2008 3:42 PM by Linetta

Muchas gracias por el ejemplo, y la forma en cómo expusiste el concepto de generics! me ha sido de utilidad!

Leave a Comment

(required) 
(required) 
(optional)
(required) 
Powered by Community Server (Commercial Edition), by Telligent Systems