为何此Func委托的调用能够正常工作?
代码运行逻辑详解
先拆解各部分的职责和关联:
InterfaceObj是定义了Test()方法的接口;Actual是实现该接口的具体类,包含Test()的实际执行逻辑。Test方法的作用是创建具体对象并执行传入的逻辑:它接收一个Func<InterfaceObj, bool>委托(要求接收InterfaceObj类型参数、返回bool),内部实例化Actual,再把这个实例传给委托执行,最后返回结果。Test2方法的任务是给Test传入符合要求的逻辑,不需要关心Test内部用的是什么具体对象。
关键逻辑说明
- lambda的签名匹配:Test2里的
x => x.Test()是匿名委托,编译器会自动推断参数类型——因为Test要求的委托参数是InterfaceObj,所以lambda里的x会被识别为InterfaceObj类型,x.Test()的返回值是bool,完全匹配Func<InterfaceObj, bool>的签名。 - Test2不需要知晓Actual:Test2只需要知道,传给
Test的委托会被传入一个实现了InterfaceObj的对象,因此可以放心调用接口定义的Test()方法。至于这个对象是Actual还是其他实现类,Test2完全不需要关心——这正是接口实现解耦的意义。 - 完整执行流程:
- 调用
Test2()→ 调用Test(x => x.Test()) Test内部创建Actual实例 → 把这个实例作为参数传入lambda(此时lambda里的x就是这个Actual对象)- 执行
x.Test(),实际调用Actual类中实现的Test()方法 - 返回该方法的bool结果,依次回传给
Test2和调用方
- 调用
内容的提问来源于stack exchange,提问作者Blizz
相关产品推荐
相关产品推荐

