c#匿名方法是面向对象的吗?

时间:2009-08-17 17:25:24

标签: c# oop anonymous-types

我只是查看匿名方法(在c#中) - 我的一部分喜欢灵活性和简写,但我也担心它可能会使代码更难阅读。

我也想到,这种结构似乎违背了一些o / o范式。您是否认为匿名方法符合面向对象的原则?

4 个答案:

答案 0 :(得分:19)

lambda(匿名方法)来自功能范例。这并不意味着好或坏!如果它适合问题,那么使用它,如果它不适合。 OOP不是目标,良好的代码是目标。我讨厌当人们试图强迫一个单一范式时,就像在Java中一样。 C#正朝着正确的方向发展(恕我直言),因此它正在成为一种多范式的语言。

答案 1 :(得分:4)

如果你想在面向对象的设计中考虑它们,它们只是一些匿名类的语法糖,它包含一个被调用的方法。实际上,Java是用较长的最终类来完成的。 C#选择了较短的方法。两者都是有效的,并且完全在面向对象设计的范围内。

Lambda表达式也不像代表那样面向对象。恕我直言,lambda表达式几乎完全是对OOP编程的正交研究:功能与程序性。

因此,使用正确的工具,因为lambdas,委托,匿名类,对象,monad等令人作呕。您的目标应该是拥有正确的代码来解决正确的问题。

答案 2 :(得分:1)

对于我来说,匿名函数是“面向对象的”或不是“面向对象的”是没有任何意义的。变量是面向对象的吗?循环怎么样?异常面向对象吗?

在这种情况下,标签不适用。

如果您认为在某些特定情况下,使用匿名函数来完成某些操作会使其难以阅读,那么请不要使用它。

答案 3 :(得分:0)

有趣的是,由于“闭包”,匿名方法的C#实现有时需要创建对象。在此处阅读:http://blogs.msdn.com/oldnewthing/archive/2006/08/02/686456.aspx