C#关于Func和Action委托的介绍详解
什么是委托
委托是一种可以存储并引用方法的数据类型。换句话说,委托使得我们可以把一个方法作为参数传递给另一个方法或者把一个方法存储在一个变量中。
在C#中,我们可以使用delegate
关键字来定义一个委托类型。委托类型的定义和方法的定义类似,但是没有方法体。例如:
delegate void MyDelegate(int x);
定义了一个名为MyDelegate
的委托类型,该委托类型可以接受一个int
类型参数,并且不返回任何值。
Action委托
在C#中,有两种常用的委托类型:Action
和Func
。其中,Action
委托表示不返回任何值的方法,也可以看做是一个没有参数和返回值的委托。
Action
委托没有返回值,因此不能用于需要返回值的方法。例如:
void MyMethod(int x)
{
Console.WriteLine($"MyMethod received {x}.");
}
Action<int> myAction = new Action<int>(MyMethod);
myAction(42);
上面的代码定义了一个Action<int>
类型的委托myAction
,其参数类型为int
,并将其初始化为一个指向方法MyMethod
的委托。随后,我们可以通过myAction(42)
来调用MyMethod
方法并传递参数42。
Func委托
Func
委托表示一个带有返回值的方法,且最后一个泛型参数表示方法的返回类型。例如:
int MyMethod(int x)
{
return x * 2;
}
Func<int, int> myFunc = new Func<int, int>(MyMethod);
Console.WriteLine(myFunc(5)); //输出10
上面的代码定义了一个Func<int, int>
类型的委托myFunc
,其第一个泛型参数表示方法的参数类型,第二个泛型参数表示方法的返回类型,并将其初始化为一个指向方法MyMethod
的委托。随后,我们可以通过myFunc(5)
来调用MyMethod
方法并传递参数5,并输出返回的结果10。
示例1:将委托作为方法参数
下面的代码示例演示了如何将一个委托作为方法参数,并在方法中调用该委托。
void MyMethod(int x, Action<int> myAction)
{
Console.WriteLine($"MyMethod received {x}.");
myAction(x);
}
void PrintInt(int x)
{
Console.WriteLine($"The input value is {x}.");
}
MyMethod(42, new Action<int>(PrintInt));
上面的代码中,MyMethod
方法接受两个参数:一个整数类型的参数和一个Action<int>
类型的委托。在方法中,我们先输出了传入的整数参数,然后调用了传入的myAction
委托。随后,我们调用MyMethod
方法并传递了一个整数42
以及一个指向PrintInt
方法的委托。
示例2:使用Lambda表达式创建委托
下面的代码示例演示了如何使用Lambda表达式来创建一个委托。
Func<int, int> myFunc = x => x * 2;
Console.WriteLine(myFunc(5)); //输出10
上面的代码中,我们定义了一个Func<int, int>
类型的委托myFunc
,利用Lambda表达式的形式指定myFunc
所代表的方法,并将Lambda表达式赋值给myFunc
。随后,我们可以通过myFunc(5)
来调用Lambda表达式中定义的方法,并输出返回的结果10。
结论
在C#中,委托是一种常用的数据类型,可以把一个方法作为参数传递给另一个方法或者把一个方法存储在一个变量中。Action
委托表示不返回任何值的方法,Func
委托则表示一个带有返回值的方法。还可以使用Lambda表达式来方便地创建委托。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#关于Func和Action委托的介绍详解 - Python技术站