中文字幕一区二区人妻电影,亚洲av无码一区二区乱子伦as ,亚洲精品无码永久在线观看,亚洲成aⅴ人片久青草影院按摩,亚洲黑人巨大videos

解釋什么是Action和Func

發(fā)布于:2021-01-27 10:23:42

0

525

0

Action Func C#

在C#,Action和Func是非常有用的工具,可以減少代碼中的重復(fù)和耦合。

遺憾的是,許多開(kāi)發(fā)人員對(duì)它們避而遠(yuǎn)之,因?yàn)樗麄儾⒉徽嬲斫馑鼈儭?/span>

向工具箱中添加Action和Func是改進(jìn)C代碼的一個(gè)非常重要的步驟。

了解它們的用途和使用方法其實(shí)并不難,只是需要一點(diǎn)耐心。

思考Action <>的簡(jiǎn)單方法

我們中的大多數(shù)人都非常熟悉如何找到重復(fù)代碼的部分,將代碼提取到方法中,并使該方法采用參數(shù)來(lái)表示差異。

下面是一個(gè)很熟悉的小例子:

{xunruicms_img_title}

這些方法中的每一種幾乎都執(zhí)行相同的操作。這里唯一的區(qū)別是蔬菜的類型和蒸熟的時(shí)間。

將代碼重構(gòu)為:

{xunruicms_img_title}

更好的是,現(xiàn)在我們不再用3種不同的方法重復(fù)“操作”。

現(xiàn)在讓我們想象一下,我們想要做的不僅僅是蒸汽。我們需要能夠煎或烤蔬菜。我們?cè)趺醋瞿兀?/span>

可能我們需要添加一些新的方法來(lái)實(shí)現(xiàn)這一點(diǎn)。因此我們最終會(huì)得到如下結(jié)果:

{xunruicms_img_title}

嗯,又重復(fù)了很多次。沒(méi)問(wèn)題。我們就照第一套方法做一個(gè)蔬菜烹飪法吧。既然我們總是清潔,然后烹飪,然后上菜,我們就可以把我們要用的烹飪方法傳過(guò)來(lái)了。

等等,我們?cè)趺醋觯课覀儾荒苤惶崛『姹?、油炸或蒸汽,因?yàn)楹姹骸⒂驼ê驼羝椒ㄊ沁壿嫸皇菙?shù)據(jù)。

除非…除非我們能給他們提供數(shù)據(jù)。我們能做到嗎?

我們當(dāng)然可以,看看這個(gè):

{xunruicms_img_title}

我們和第一次重構(gòu)時(shí)一樣,去掉了重復(fù)的代碼,只是這次我們參數(shù)化了方法調(diào)用,而不是數(shù)據(jù)。

如果您理解了這一點(diǎn),那么您就理解了操作。操作只是一種將方法視為數(shù)據(jù)的方式。現(xiàn)在您可以將所有公共邏輯提取到一個(gè)方法中,并傳入發(fā)生變化的數(shù)據(jù)和發(fā)生變化的操作。

恭喜你,你不用創(chuàng)建一個(gè)抽象基類和一個(gè)巨大的繼承樹(shù)就可以完成策略模式了!

所以當(dāng)你看到Action時(shí),只要想“啊,那意味著我正在傳遞一個(gè)方法作為數(shù)據(jù)?!?/span>

其實(shí)就這么簡(jiǎn)單

那么Func <>呢?

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

轉(zhuǎn)換為英語(yǔ)的Func <X,Y,Z>是:“一種將X和Y作為參數(shù)并返回Z的方法?!?/span>

Action和Func之間的唯一區(qū)別是Func的最后一個(gè)模板參數(shù)是返回類型。Func具有非void返回值。

謂詞是一個(gè)Func,總是返回一個(gè)布爾值。

這就是它的全部?jī)?nèi)容了,真的不需要知道更多的東西來(lái)確定ActionFunc,以便開(kāi)始使用它們。