问题:C#想要传递函数参数,但是参数类型是函数,不知道如何传递。
答:结合.NET委托的性质和直接用匿名委托传函数还是比较简单的,下面是具体实现:
1. 使用匿名委托
using System;
namespace CSharp
{
class Program
{
public static void FunctionA(System.Action action)
{
Console.WriteLine("我是函数A");
action.Invoke();
}
public static void FunctionB()
{
Console.WriteLine("我是函数B");
}
static void Main(string[] args)
{
FunctionA(delegate () { FunctionB(); });
Console.ReadKey();
}
}
}
2. 使用委托
using System;
namespace CSharp
{
class Program
{
//委托:将一个方法作为参数传递给另一个方法
//声明委托类型:委托所指向的函数必须跟委托具有相同的签名(函数的返回值和参数)
public delegate void DelSayHi(string name);
public static void Test(string name, DelSayHi del)
{
del(name);
}
public static void SayHiEnglish(string name)
{
Console.WriteLine("Nice to meet you! " + name);
}
static void Main(string[] args)
{
Test("张三", SayHiEnglish);
Console.ReadKey();
}
}
}