Grupos de métodos en C#
-
Grupo de métodos en
C#
-
Delegates
enC#
-
Conversión de grupos de métodos con
DELEGATE
enC#
-
Delegate
personalizado simple para grupos de métodos enC#
-
Usar punteros de función para grupos de métodos en
C#
Este artículo abordará los grupos de métodos en C#.
Grupo de métodos en C#
A veces nos encontramos con un caso en el que una función puede tener más de una implementación. Puede tener otra definición con un conjunto o tipo de parámetros completamente diferente o generalmente se conoce como una función sobrecargada.
Sintaxis:
void print(int x) {
///...code
}
void print(int x, int y) {
///...code for x and y
}
Estas funciones o métodos se denominan GRUPOS DE MÉTODOS.
Delegates
en C#
DELEGATES
son punteros a funciones creadas. Además de apuntar a la función, también define el tipo de devolución de las funciones y sus parámetros.
Un delegado, digamos, llamado LAPTOP
puede tener un tipo de retorno como void y un parámetro como USERNAME
(cadena). Tenemos otra función llamada PC
, que también tiene el mismo tipo de retorno y tipo de parámetro que LAPTOP
.
Podemos llamar a PC
desde el delegado LAPTOP
en este escenario.
Ejemplo de código:
delegate void LAPTOP(string username);
static void PC(string username) {
Console.WriteLine("USER: " + username + " has logged in!");
}
static void Main() {
LAPTOP lap1 = PC;
lap1("Hydrogen");
}
Puede notar que hemos creado una instancia de la instancia LAPTOP
con PC
, y al invocarla más tarde, hacemos que imprimamos el nombre de usuario pasado desde el método PC
. Así funcionan los DELEGADOS
.
Conversión de grupos de métodos con DELEGATE
en C#
Veremos uno de los usos más comunes de los grupos de métodos y cómo manejarlos cuando se les llama. Discutimos cómo los grupos de métodos son funciones sobrecargadas de un método básico, y podemos usar grupos de métodos como deseemos usando DELEGATES
.
En nuestro ejemplo, supongamos que tenemos un método llamado CAR
desde el que queremos dirigirnos a varios otros métodos, como DASHBOARD
, WHEEL
, LIGHTS
etc. Por comodidad, sólo utilizaremos dos métodos: LIGHTS
y MIRRORS
.
Ejemplo de código:
delegate void CAR(bool start);
static void MIRROR(bool start) {
if (start)
Console.WriteLine("Mirror is now working!");
else
Console.WriteLine("Mirror is not stopped/closed");
}
static void LIGHTS(bool start) {
if (start)
Console.WriteLine("Lights are now working!");
else
Console.WriteLine("Lights have stopped/closed");
}
Ahora que hemos definido los métodos, implementemos el método MAIN
, donde usamos delegados para manejar estos grupos de métodos.
CAR car = MIRROR;
car(true);
car = LIGHTS;
car(false);
Puedes notar que el objeto CAR
apunta al MIRROR
, pero luego se hace que apunte a LIGHTS
. Entonces al llamar al método se llama a la función a la que apunta.
El nombre de la función se asigna al objeto car
. Cambiar el puntero DELEGATE
para que apunte a diferentes métodos en su grupo se denomina CONVERSIÓN DE GRUPO DE MÉTODOS
, y en este escenario, LIGHTS
, MIRRORS
y CAR
forman parte del mismo grupo de métodos.
Delegate
personalizado simple para grupos de métodos en C#
Una forma simple de crear un DELEGATE
que pueda apuntar a GRUPOS DE MÉTODOS
es algo tan simple como lo siguiente.
Func<string> f_test = "AA".ToString;
Console.WriteLine(f_test());
Invocar lo anterior generará la cadena AA
como resultado. F_TEST
apunta al método ToString
y lo llama.
También puede notar que esta función apunta a la dirección del método ToString
y no a la función en sí. Así es como funcionan los punteros.
A continuación se proporciona otro ejemplo para entender correctamente GRUPOS DE MÉTODOS
.
Func<string, int> f_test = Convert.ToInt32;
Console.WriteLine(f_test("435"));
Sintaxis:
Func<param1, param2> name;
//param1 is the parameter passed in the function/method pointed to
//param 2 is the return type of that function/method that the delegate points to
Como Convert.ToInt32
tiene un tipo de retorno de INT
y 18
sobrecargas diferentes. Es imperativo definir el tipo de parámetro porque queremos llamar a F_TEST
con una cadena "435"
, y definimos PARAM2
como STRING
.
Definir PARAM2
es importante incluso si solo hay una sobrecarga de una función presente; debido a que los GRUPOS DE MÉTODOS
son construcciones de tiempo compiladas, deben elegirse para una sola sobrecarga. Es importante asegurarse de que PARAM2
contenga al menos una sobrecarga.
También puede eliminar el molde en LINQ
al llamar a List.Select(MethodGroup)
en una función. No discutiremos los contextos LINQ
en detalle porque este artículo se centra en GRUPOS DE MÉTODOS
.
Usar punteros de función para grupos de métodos en C#
Solo es necesario señalar funciones diferentes de un delegado si está trabajando en GRUPOS DE MÉTODOS
. Debe asegurarse de que los tipos de devolución y los parámetros coincidan en tales circunstancias.
C# ya proporciona una palabra clave FUNC
para permitir apuntar a diferentes funciones. Así como los punteros funcionan apuntando a direcciones de objetos y variables y luego llamándolos, puede imaginar delegados de la misma manera.
Los punteros también tienden a tener el mismo tipo de retorno que los objetos a los que se dirigen. Los delegados también deben cuidar los parámetros debido a los requisitos de la función.
Se necesita apuntar a funciones cuando, digamos, desea almacenar funciones en una matriz y llamarlas dinámicamente para su código o pasar las funciones a otras funciones para que sean llamadas. Las funciones LAMBDA
también cumplen el mismo requisito.
Sin embargo, los GRUPOS DE MÉTODOS
son clústeres comunes con funciones sobrecargadas que siguen un tipo básico de retorno y parámetro.
Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!
GitHub