【问题标题】:C# delegate definition - anonymous methods vs. formally defined methodsC# 委托定义 - 匿名方法与正式定义的方法
【发布时间】:2010-11-10 03:24:26
【问题描述】:

定义委托时应何时使用匿名方法,定义委托时应何时使用正式定义的方法?

【问题讨论】:

    标签: c# methods delegates anonymous


    【解决方案1】:

    如果您需要在多个地方使用相同的逻辑,则使用单独的方法是有意义的。

    如果您只需要使用一次逻辑并且它相当短,那么使用匿名函数是有意义的。如果委托需要访问创建它的方法中的局部变量,匿名函数充当闭包,这也非常方便。

    此外,如果匿名函数用于诸如并行扩展之类的并行化之类的东西,即使它相当长也很有用 - 部分原因是您可以采用现有的串行代码并将其“就地”并行化为很大程度。

    您可能还需要考虑可测试性 - 如果您的委托代码足够复杂以至于需要进行自己的单元测试,那么将其作为一种方法公开是很有意义的。 (不幸的是,它必须是使用 InternalsVisibleTo 的内部方法或公共方法,通常您通常希望它是私有的,但这就是生活。)

    【讨论】:

    • 逻辑分离是我没有考虑过的,并且无需传递参数即可轻松访问局部变量很有趣。并行扩展是 C# 4.0 的特性吗?
    • 我想补充一点,这两者并不相互排斥。拥有一个主要调用常规函数的匿名函数通常很方便,可以同时获得可重用性和闭包的优势。
    • 是的,并行扩展随 4.0 一起提供。
    • 谢谢你,史蒂文。您一直在使用 VS 2010 Beta 吗?你会建议我现在开始评估它吗?据我所知,它定于今年第四季度的 RTM。
    • 请注意,并行扩展是 .NET 4.0 功能,而不是 C# 4.0 功能。我总是喜欢将语言版本与平台版本分开。顺便说一句,我还没有看到任何 VS2010 的 RTM 日期,第四季度对我来说听起来相当乐观。我怀疑它真的会在 2010 年。再说一次,这部分只是希望我的书的第二版不会比产品晚 很多 :)
    【解决方案2】:

    当应该执行的函数只应由该委托执行时(换句话说:当我在任何其他地方不需要该函数时),以及必须执行的函数/方法时,我使用匿名方法执行的时间相对较短(最多 5 行)。

    但是,没有严格的规则定义何时使用什么。
    恕我直言,我发现匿名方法在大多数情况下都不会提高可读性,所以我大多不使用它们。

    【讨论】:

    • 啊,这是有道理的:相对较短的长度。也感谢关于可读性的意见,因为我发现匿名语法有点复杂,我想知道这是否只是我!
    猜你喜欢
    • 2010-11-01
    • 1970-01-01
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    • 2012-02-02
    • 1970-01-01
    相关资源
    最近更新 更多