C# | Delegado de funciones

Requisito previo: Delegados en C#

Cuando creamos un delegado personalizado tenemos que seguir los siguientes pasos:

Paso 1: declarar un delegado personalizado con el formato que es exactamente igual al método.

Paso 2: crea el objeto del delegado personalizado.

Paso 3: invocar el método.

Al seguir estos pasos, creamos un delegado personalizado como se muestra en el siguiente programa. Pero el problema es que para crear un delegado necesitamos seguir el procedimiento anterior. Para superar esta situación, C# proporciona un delegado integrado que es Func . Con el delegado de Func, no necesita seguir el siguiente procedimiento para crear un delegado.

Ejemplo:

// C# program to illustrate how to 
// create custom delegates
using System;
  
class GFG {
  
    // Declaring the delegate
    public delegate int my_delegate(int s, int d,
                                   int f, int g);
  
    // Method
    public static int mymethod(int s, int d,
                              int f, int g)
    {
        return s * d * f * g;
    }
  
    // Main method
    static public void Main()
    {
  
        // Creating object of my_delegate
        my_delegate obj = mymethod;
        Console.WriteLine(obj(12, 34, 35, 34));
    }
}

Producción:

485520

Un Func es un delegado de tipo genérico incorporado. Este delegado le evita definir un delegado personalizado como se muestra en el ejemplo anterior y hace que su programa sea más legible y optimizado. Como sabemos, Func es un delegado genérico, por lo que se define en el espacio de nombres del sistema . Puede contener un mínimo de 0 y un máximo de 16 parámetros de entrada y contener solo un parámetro de salida . El último parámetro del delegado Func es el parámetro out que se considera como tipo de retorno y se usa para el resultado . Func se usa generalmente para aquellos métodos que devolverán un valor, o en otras palabras, el delegado de Func se usa para los métodos que devuelven valor. También puede contener parámetros del mismo tipo o de diferentes tipos.

Sintaxis:

// Cero parámetros normales y un parámetro de resultado
público delegado TResult Func<out PResult>();

// Un parámetro normal y un parámetro de resultado
público delegado TResult Func<in P, out PResult>(P arg);

// Dos parámetros normales y un parámetro de resultado
público delegado TResult Func<in P1, in P2, out PResult>(P1 arg1, P2 arg2);

// Dieciséis parámetros normales y un parámetro de resultado
público delegado TResult Func<in P1, in P2, in P3, in P4, in P05, in P6, in P7, in P8, in P9, in P10, in P11, in P12, en P13, en P14, en P15, en P16, fuera PResult>(P1 arg1, P2 arg2, P3 arg3, P4 arg4, P5 arg5, P6 arg6, P7 arg7, P8 arg8, P9 arg9, P10 arg10, P11 arg11, P12 arg12, P13 arg13, P14 arg14, P15 arg15, P16 arg16);

Aquí, P1 , P2 …. P16 son el tipo de parámetros de entrada, PResult es el tipo de parámetro de salida y arg1 …. arg16 son el parámetro del método que encapsula el delegado Func.

Ejemplo 1: Aquí, usamos un delegado Func para crear un delegado solo en una sola línea sin usar el procedimiento anterior. Este delegado Func contiene cuatro parámetros de entrada y un parámetro de salida.

// C# program to illustrate Func delegate
using System;
  
class GFG {
  
    // Method
    public static int mymethod(int s, int d, int f, int g)
    {
        return s * d * f * g;
    }
  
    // Main method
    static public void Main()
    {
  
        // Using Func delegate
        // Here, Func delegate contains
        // the four parameters of int type
        // one result parameter of int type
        Func<int, int, int, int, int> val = mymethod;
        Console.WriteLine(val(10, 100, 1000, 1));
    }
}

Producción:

1000000

Ejemplo 2:

// C# program to illustrate Func delegate
using System;
  
class GFG {
  
    // Method
    public static int method(int num)
    {
        return num + num;
    }
  
    // Main method
    static public void Main()
    {
  
        // Using Func delegate
        // Here, Func delegate contains 
        // the one parameters of int type
        // one result parameter of int type
        Func<int, int> myfun = method;
        Console.WriteLine(myfun(10));
    }
}

Producción:

20

Puntos importantes:

  • El último parámetro en Func Delegate siempre es un parámetro de salida que se considera como un tipo de retorno. Se utiliza generalmente para el resultado.
  • También puede usar un delegado de Func con un método anónimo. Como se muestra en el siguiente ejemplo:

    Ejemplo:

    Func<int, int, int> val = delegate(int x, int y, int z)
    {
        return x + y + z;
    };
  • También puede usar un delegado Func con las expresiones lambda. Como se muestra en el siguiente ejemplo:

    Ejemplo:

    Func<int, int, int, int> val = (int x, int y, int z) = > x + y + z;

Publicación traducida automáticamente

Artículo escrito por ankita_saini y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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