Menu

Métodos genéricos

agosto 25, 2010 - ASP.NET

Los métodos genéricos son una interesante herramienta de programación la cual nos ayuda a minimizar la tarea de programación, éste tiene como objeto definir métodos con tipo parametrizados que nos ofrece la potencia de parámetros fuertemente tipados así como las devoluciones sin conocer qué tipo de dato en específico vamos a recibir.

Antes

Asumamos tenemos un método que compara dos numeros enteros así:

 public int Comparar(int a, int b)
 {
 …
 }

Ahora digamos que necesitamos aumentar las posibilidades del método para comparar no solo enteros sino también tipos double, float, long y un largo etcétera. Lo primero que haríamos seria dedicarnos un buen rato sobrecargando el método para que aceptara cada tipo de parámetro que necesitamos, al final tendríamos:

 public double Comparar(double a, double b)
 {
 …
 }

 public float Comparar(float a, float b)
 {
 …
 }

 public long Comparar(long a, long b)
 {
 …
 }

Así tendríamos 3 métodos en total que en funcionalidad son lo mismo, pero en definición no lo son.

Métodos genéricos al rescate!

Es en esta situación cuando los métodos genéricos entran a la escena y nos ayudan a resolver este problema, ahora reescribimos el código:


 public T Comparar(T a, T b) where T: IComparable
 {
 …
 }

En español el método anterior describe: soy un método que voy a recibir dos parámetros de tipo desconocido y devolver un parámetro de tipo desconocido, pero estos parámetros deben ser de tipo IComparable, así en tiempo de compilación el tipo de parámetro T se reemplaza por el tipo de dato el cual estamos enviándole resultando a la final en un método fuertemente tipado.
Un ejemplo convencional de este tipo de métodos son las colecciones genéricas, que no saben qué tipo de datos van a almacenar solo al tiempo de compilación. Ejemplo:


List MyList = new List();

La clase List no sabe qué tipo de dato va a recibir hasta el momento que se compila la aplicación. Espero les haya sido útil esta pequeña entrada acerca de los métodos genéricos.

Happy coding!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *