C#/VB.Net如何传递带实参的函数作为参数且延迟执行?
C# 实现方式
在C#中,我们可以利用.NET内置的Action委托(无参无返回值的委托类型),通过lambda表达式包裹带参数的函数调用,将其作为无参委托传递给目标函数,实现和JavaScript示例一致的逻辑:
using System; class Program { // 定义带参的目标函数 static void FunctionToPass1(int x, int y) { Console.WriteLine($"{x} {y}"); } static void FunctionToPass2(int x, int y, int z) { Console.WriteLine($"{x} {y} {z}"); } // 接收普通参数和无参委托的主函数 static void MainFunction(string param1, string param2, Action functionToPass) { Console.WriteLine($"{param1} {param2}"); functionToPass(); // 执行传入的委托 } static void Main() { // 用lambda表达式包裹带参函数调用,作为无参委托传递 MainFunction("a", "b", () => { FunctionToPass2(1, 2, 3); }); } }
VB.Net 实现方式
VB.Net中可以使用Action委托结合匿名Sub,实现相同的功能:
Imports System Module Program ' 定义带参的目标过程 Sub FunctionToPass1(x As Integer, y As Integer) Console.WriteLine($"{x} {y}") End Sub Sub FunctionToPass2(x As Integer, y As Integer, z As Integer) Console.WriteLine($"{x} {y} {z}") End Sub ' 接收普通参数和无参委托的主过程 Sub MainFunction(param1 As String, param2 As String, functionToPass As Action) Console.WriteLine($"{param1} {param2}") functionToPass.Invoke() ' 执行传入的委托 End Sub Sub Main() ' 用匿名Sub包裹带参过程调用,作为无参委托传递 MainFunction("a", "b", Sub() FunctionToPass2(1, 2, 3)) End Sub End Module
核心逻辑说明
两种实现的思路和JavaScript示例完全匹配:创建一个无参的委托/匿名函数,在其内部预先绑定好实际参数并调用目标函数,再将这个无参委托传递给主函数,由主函数在需要的时候执行它。
内容的提问来源于stack exchange,提问作者Dejan Dozet
相关产品推荐
相关产品推荐

