如何将方法作为入参传递给其他方法,类似构造函数的传参形式
方法作为参数传递的实现方案
你要实现的本质是「将方法作为类型化参数传入另一个方法」,主流开发语言都有成熟的实现方案,这里以最常见的.NET平台C#控制台应用为例说明:
核心实现逻辑
C#内置了Action和Func两类泛型委托,专门用来定义方法的签名模板,只要匹配模板的方法都可以直接作为参数传递:
Action系列委托:对应无返回值的方法,支持最多16个入参,泛型参数就是方法的入参类型Func系列委托:对应有返回值的方法,泛型参数的最后一位是方法的返回值类型,前面的是入参类型
代码示例
无返回值方法传参
// 待传入的方法,入参为string,无返回值 static void Method2(string message) { Console.WriteLine($"Method2执行,收到参数:{message}"); } // 接收方法作为参数的Method1,参数类型声明为Action<string> static void Method1(Action<string> targetMethod) { // 内部可直接调用传入的方法 targetMethod("测试传入参数"); } // 调用效果完全符合你要的写法 static void Main(string[] args) { Method1(Method2); }
有返回值方法传参
// 待传入的方法,两个int入参,返回int类型结果 static int Method2(int a, int b) { return a + b; } // 参数类型声明为Func<int, int, int>,最后一位int为返回值类型 static void Method1(Func<int, int, int> calcMethod) { int result = calcMethod(1, 2); Console.WriteLine($"计算结果:{result}"); } static void Main(string[] args) { Method1(Method2); }
其他语言的实现方式
- Java 8+:使用函数式接口,可直接用自带的
Consumer、Function等接口,也可自定义带@FunctionalInterface注解的接口 - Python:动态类型特性支持直接传入方法名,无需额外声明类型
- C++:可通过函数指针、
std::function实现该需求
注意:传入的方法的参数数量、参数类型、返回值类型必须和你声明的委托/函数式接口完全匹配,否则会触发编译错误
内容的提问来源于stack exchange,提问作者Leo Christensson
相关产品推荐
相关产品推荐

