在C#中,可以使用委托(Delegate)和事件(Event)来将函数作为参数传递。委托是一种类型安全的函数指针,可以将一个方法作为参数传递给另一个方法。以下是一个简单的示例:
using System;
public class Program
{
public delegate void MyDelegate(string message);
public static void MyMethod(string message)
{
Console.WriteLine("MyMethod: " + message);
}
public static void CallMethod(MyDelegate del, string message)
{
del(message);
}
public static void Main(string[] args)
{
MyDelegate myDel = new MyDelegate(MyMethod);
CallMethod(myDel, "Hello, World!");
}
}
在上面的示例中,我们定义了一个名为MyDelegate
的委托类型,该类型表示一个接受字符串参数并返回无类型的方法。然后,我们定义了一个名为MyMethod
的静态方法,该方法接受一个字符串参数并将其输出到控制台。接下来,我们定义了一个名为CallMethod
的静态方法,该方法接受一个MyDelegate
类型的参数和一个字符串参数,并调用该委托来调用MyMethod
方法。最后,在Main
方法中,我们创建了一个MyDelegate
实例,并将其传递给CallMethod
方法。
另外,还可以使用泛型委托Func<...>
和Action<...>
来实现类似的功能。Func<...>
委托表示具有返回值的方法,而Action<...>
委托表示无返回值的方法。例如,上面的示例可以使用Action<string>
替换MyDelegate
:
using System;
public class Program
{
public static void MyMethod(string message)
{
Console.WriteLine("MyMethod: " + message);
}
public static void CallMethod(Action<string> action, string message)
{
action(message);
}
public static void Main(string[] args)
{
CallMethod(MyMethod, "Hello, World!");
}
}
在上面的示例中,我们省略了MyDelegate
委托类型,而是使用了Action<string>
委托来表示接受一个字符串参数并返回无类型的方法。其他部分的实现与前一个示例相同。
领取专属 10元无门槛券
手把手带您无忧上云