You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何此Func委托的调用能够正常工作?

代码运行逻辑详解

先拆解各部分的职责和关联:

  • InterfaceObj是定义了Test()方法的接口;Actual是实现该接口的具体类,包含Test()的实际执行逻辑。
  • Test方法的作用是创建具体对象并执行传入的逻辑:它接收一个Func<InterfaceObj, bool>委托(要求接收InterfaceObj类型参数、返回bool),内部实例化Actual,再把这个实例传给委托执行,最后返回结果。
  • Test2方法的任务是给Test传入符合要求的逻辑,不需要关心Test内部用的是什么具体对象。

关键逻辑说明

  1. lambda的签名匹配:Test2里的x => x.Test()是匿名委托,编译器会自动推断参数类型——因为Test要求的委托参数是InterfaceObj,所以lambda里的x会被识别为InterfaceObj类型,x.Test()的返回值是bool,完全匹配Func<InterfaceObj, bool>的签名。
  2. Test2不需要知晓Actual:Test2只需要知道,传给Test的委托会被传入一个实现了InterfaceObj的对象,因此可以放心调用接口定义的Test()方法。至于这个对象是Actual还是其他实现类,Test2完全不需要关心——这正是接口实现解耦的意义。
  3. 完整执行流程:
    • 调用Test2() → 调用Test(x => x.Test())
    • Test内部创建Actual实例 → 把这个实例作为参数传入lambda(此时lambda里的x就是这个Actual对象)
    • 执行x.Test(),实际调用Actual类中实现的Test()方法
    • 返回该方法的bool结果,依次回传给Test2和调用方

内容的提问来源于stack exchange,提问作者Blizz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 06:35:44