Crear una función genérica en C#

Muhammad Maisam Abbas 16 febrero 2024
  1. Crear una función genérica con sobrecarga de funciones en C#
  2. Crear una función genérica con clase T en C#
Crear una función genérica en C#

Este tutorial analizará los métodos para crear una función con un tipo de retorno genérico en C#.

Crear una función genérica con sobrecarga de funciones en C#

Si nos enfrentamos a un escenario en el que necesitamos que se aplique la misma función a diferentes tipos de datos, podemos tener múltiples soluciones para ese problema.

Nuestra primera solución implica sobrecarga de funciones. En esto, creamos múltiples funciones con el mismo nombre pero diferentes tipos de devolución o diferentes parámetros.

El siguiente fragmento de código demuestra cómo podemos lograr una función genérica mediante la sobrecarga de funciones en C#.

class myClass {
  public int div(int a, int b) {
    return a / b;
  }
  public double div(double a, double b) {
    return a / b;
  }

  public static void Main(String[] args) {
    myClass ob = new myClass();

    int result1 = ob.div(12, 2);
    Console.WriteLine(result1);
    double result2 = ob.div(13, 2.5);
    Console.WriteLine(result2);
  }
}

Producción :

6
5.2

Definimos dos funciones diferentes del mismo nombre, div(), que manejan la división de enteros y decimales en C#. De manera similar, se pueden escribir más funciones para manejar más casos.

La ventaja de este método es que no estamos obligados a hacer lo mismo con todos los tipos de datos. Podemos hacer una cosa con un tipo de datos y hacer lo contrario con el otro tipo de datos.

Todo depende de nuestro escenario y necesidades.

La clara desventaja de este enfoque es que tenemos que escribir mucho código. Este problema se hace evidente cuando hacemos lo mismo pero necesitamos cubrir todos los tipos de datos.

Crear una función genérica con clase T en C#

Este enfoque es el mejor en escenarios en los que estamos haciendo lo mismo con todos los tipos de datos y necesitamos manejar muchos casos.

Un ejemplo de este tipo de tarea es la lectura de datos de una base de datos. Aquí, sabemos que los tipos de datos de una columna son los mismos, pero no tenemos idea de antemano sobre el tipo de datos o la columna.

En C#, una función genérica es una función que se declara con un parámetro de tipo T. Este parámetro de tipo T se utiliza al llamar a la función para definir el tipo de función.

Podemos llamar a la misma función con diferentes tipos de datos como parámetros de tipo cada vez.

El siguiente fragmento de código demuestra cómo podemos usar el parámetro de tipo para declarar y usar una función con un tipo de retorno genérico en C#.

static T changeType<T>(string v) {
  return (T)Convert.ChangeType(v, typeof(T));
}
string s = "92";
int ci = changeType<int>(s);
float cf = changeType<float>(s);
decimal cd = changeType<decimal>(s);
Console.WriteLine(ci);
Console.WriteLine(cf);
Console.WriteLine(cd);

Producción :

92
92
92

En el código anterior, declaramos una función changeType<T>() con el parámetro de tipo T. Esta función toma una variable de cadena v como parámetro de entrada, convierte el tipo de datos del parámetro de entrada v a T, convierte el resultado en T y lo devuelve.

El resultado muestra lo que sucede cuando tratamos de cambiar el tipo de datos de la cadena 92 a entero, flotante y decimal, respectivamente.

El problema con este enfoque es que si la cadena no se puede convertir en tipo al parámetro de tipo T, daría un error de tiempo de ejecución.

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn

Artículo relacionado - Csharp Data Type