先决条件:C#中的代表
创建自定义委托时,我们必须遵循以下步骤:
步骤1:以与方法完全相同的格式声明一个自定义委托。
步骤2:创建自定义委托的对象。
步骤3:调用方法。
通过使用这些步骤,我们创建了一个自定义委托,如下面的程序所示。但是问题在于,要创建委托,我们需要遵循上述过程。为了克服这种情况,C#提供了一个内置的Func委托。使用Func委托,您无需遵循以下过程即可创建委托。
例子:
// 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));
}
}
输出:
485520
Func是内置的泛型类型委托。该委托使您不必像上面的示例中那样定义自定义委托,并使您的程序更具可读性和优化性。众所周知,Func是一个通用委托,因此它是在系统名称空间下定义的。它最多可以包含0个输入参数,最多可以包含16个输入参数,并且只能包含一个out参数。 Func委托的最后一个参数是out参数,它被视为返回类型并用于结果。 Func通常用于将要返回值的那些方法,换句话说,Func委托用于值返回的方法。它也可以包含相同类型或不同类型的参数。
句法:
// Zero normal parameters and one result parameter
public delegate TResult Func
// One normal parameter and one result parameter
public delegate TResult Func
// Two normal parameters and one result parameter
public delegate TResult Func
// Sixteen normal parameters and one result parameter
public delegate TResult Func
在这里, P1 , P2 …。 P16是输入参数的类型, PResult是输出参数的类型, arg1 …。 arg16是Func委托封装的方法的参数。
示例1:在这里,我们使用Func委托仅在一行中创建委托,而无需使用上述过程。该Func委托包含四个输入参数和一个输出参数。
// 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 val = mymethod;
Console.WriteLine(val(10, 100, 1000, 1));
}
}
输出:
1000000
范例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 myfun = method;
Console.WriteLine(myfun(10));
}
}
输出:
20
重要事项:
- Func Delegate中的最后一个参数始终是out参数,该参数被视为返回类型。通常用于结果。
- 您还可以将Func委托与匿名方法一起使用。如下例所示:
例子:
Func
val = delegate(int x, int y, int z) { return x + y + z; }; - 您还可以将Func委托与lambda表达式一起使用。如下例所示:
例子:
Func
val = (int x, int y, int z) = > x + y + z;