C#匿名方法是否面向对象?

7
我正在研究匿名方法(在c#中)-一部分人喜欢其灵活性和简洁性,但我也担心它可能会使代码难以阅读。
我也意识到这种构造似乎违背了一些面向对象的范例。你认为匿名方法符合面向对象原则吗?

6
值得一提的是,即使你认为匿名方法或Lambda表达式不是面向对象的,也要记住,面向对象并不是一个目标本身。像大多数行业方面一样,面向对象是工具箱中的一种工具,可以帮助你更好、更快地实现目标。严格遵守单一技术本身并没有多少价值(除非你只是想学习它)。相反,充分利用可用的技术,无论是面向对象还是函数式编程,以最大效力实现你的目标。 :) - Greg D
4个回答

19

lambda(匿名方法)来自函数式编程范式。这并不意味着它好或坏!如果它适合解决问题那就使用它,如果不适合就不用。面向对象编程不是目标,好的代码才是目标。我讨厌人们试图把单一的范式强加给别人,比如在Java中。C#正在朝着正确的方向发展(依我之见),所以它正在成为一个多范式语言。


4
如果你想以面向对象的设计来考虑它们,Lambda表达式只是一些匿名类的语法糖,其中包含一个被调用的方法。事实上,Java使用更冗长的final类来实现。C#选择了更简短的方法。两者都是有效的,并且都在面向对象设计的范围内。
Lambda表达式也不比委托更少面向对象。在我看来,Lambda表达式几乎完全属于编程中与OOP无关的正交学习:函数式与过程式。
因此,使用正确的工具来解决问题,无论是Lambda表达式、委托、匿名类、对象、单子等等。你的目标应该是拥有适当的代码来解决正确的问题。

1
我认为Java扭曲了Lambda的概念。没有理由认为Lambda必须被视为面向对象编程才是好的。 - Khaled Alshaya
我会+1 AraK的观点以强调编程不仅仅是单一范式的问题。 - user7116

1

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

在这种情况下,标签并不是一个有用的应用。

如果你认为在某些特定情况下,使用匿名函数来完成某些事情会使阅读更加困难,那么就不要使用它。


+1 强调函数式编程和面向对象编程在彼此之间是正交的。 - Steven Sudit

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接