Uno de los nuevos conceptos del .NET Framework 2.0 es el de Generics.
Generics es una característica del CLR que permite declarar clases, estructuras, interfaces y métodos sin especificar en tiempo de compilación los tipo de dato que almacenan o utilizan, y especificando en su lugar parámetros “genéricos”. Los tipos reales de los datos se especifican cuando el tipo genérico es utilizado y no cuando es declarado, permitiendo definirlo una única vez y utilizarlo muchas veces con parámetros de distinto tipo.
Generics está soportado directamente por el CLR, aunque sólo se puede hacer uso de esta característica desde los lenguajes VB.NET, C# y C++ .NET.
En otras palabras:
Declaramos una clase genérica:
-
public class ClaseGenerica
-
{
-
public T Atributo;
-
}
Instancia de la clase genérica (en este caso será un string):
-
g.Atributo = “Hola”;
-
g.Atributo = 2; //Esto genera un error de compilación…
… o mejor un entero?
-
g.Atributo = 2;
El poder de los Generics está en usarlos, por ejemplo, para crear Colecciones Genéricas, he aquí un ejemplo real:
Sin Generics:
-
lista.Add(“Hola”); //Como se agrega un System.Object podemos agregar un string…
-
lista.Add(2); // o un entero, no hay error de compilación
-
for (int i = 0; i <lista.Count; i++)
-
{
-
//pero es necesario hacer el casting del tipo que contiene la lista al usarlo:
-
System.Console.Write((string) lista[i]);
-
//en este ejemplo, se generará una exepción, al intentar hacer casting de un entero…
-
}
Aplicando Generics:
-
lista.Add(“Hola”); //Se recibe directamente un string en vez de un Object, ya que así se indico al instanciar…
-
lista.Add(2); //esto provoca un error de compilación, ya que nuestra instancia solo acepta strings…
-
for (int i = 0; i <lista.Count; i++)
-
{
-
System.Console.Write(lista[i]);
-
//No es necesario hacer casting!!!
-
}
En conclusión, las principales ventajas de usar Generics, son en performance y validación en tiempo de compilación.
Performance porque se evitan las operaciones de casting y boxing/unboxing necesarias para insertar y obtener elementos de colecciones no genéricas. Además, los elementos son almacenados directamente en el tipo que específica la instancia (int y string en los ejemplos anteriores) y no instancias completas de System.Object.
Y la validación en tiempo de compilación asegura un código con menos errores.

Sorry you must register to comments in this post