解释什么是Action和Func

发布于:2021-01-27 10:23:42

0

445

0

Action Func C#

在C#,Action和Func是非常有用的工具,可以减少代码中的重复和耦合。

遗憾的是,许多开发人员对它们避而远之,因为他们并不真正理解它们。

向工具箱中添加Action和Func是改进C代码的一个非常重要的步骤。

了解它们的用途和使用方法其实并不难,只是需要一点耐心。

思考Action <>的简单方法

我们中的大多数人都非常熟悉如何找到重复代码的部分,将代码提取到方法中,并使该方法采用参数来表示差异。

下面是一个很熟悉的小例子:

{xunruicms_img_title}

这些方法中的每一种几乎都执行相同的操作。这里唯一的区别是蔬菜的类型和蒸熟的时间。

将代码重构为:

{xunruicms_img_title}

更好的是,现在我们不再用3种不同的方法重复“操作”。

现在让我们想象一下,我们想要做的不仅仅是蒸汽。我们需要能够煎或烤蔬菜。我们怎么做呢?

可能我们需要添加一些新的方法来实现这一点。因此我们最终会得到如下结果:

{xunruicms_img_title}

嗯,又重复了很多次。没问题。我们就照第一套方法做一个蔬菜烹饪法吧。既然我们总是清洁,然后烹饪,然后上菜,我们就可以把我们要用的烹饪方法传过来了。

等等,我们怎么做?我们不能只提取烘焙、油炸或蒸汽,因为烘焙、油炸和蒸汽方法是逻辑而不是数据。

除非…除非我们能给他们提供数据。我们能做到吗?

我们当然可以,看看这个:

{xunruicms_img_title}

我们和第一次重构时一样,去掉了重复的代码,只是这次我们参数化了方法调用,而不是数据。

如果您理解了这一点,那么您就理解了操作。操作只是一种将方法视为数据的方式。现在您可以将所有公共逻辑提取到一个方法中,并传入发生变化的数据和发生变化的操作。

恭喜你,你不用创建一个抽象基类和一个巨大的继承树就可以完成策略模式了!

所以当你看到Action时,只要想“啊,那意味着我正在传递一个方法作为数据。”

其实就这么简单

那么Func <>呢?

如果您了解Action,就可以了解Func。

转换为英语的Func <X,Y,Z>是:“一种将X和Y作为参数并返回Z的方法。”

Action和Func之间的唯一区别是Func的最后一个模板参数是返回类型。Func具有非void返回值。

谓词是一个Func,总是返回一个布尔值。

这就是它的全部内容了,真的不需要知道更多的东西来确定ActionFunc,以便开始使用它们。