C#:匿名方法与命名方法

我是SO的新手,日复一日地使用技术(C#)术语进行编程和学习。

谷歌搜索了一段时间后,下面是我研究的methods

  1. Method是一个语句块,用于代码可重用性,它还支持使用不同的SIGNATURE进行重载….例如:drawShape(2pts),drawShape(3pts)等…

  2. Anonymous方法是一个带有语句块的方法,但没有名称….(因为它过早要求,在wt情况下我们遇到匿名方法……任何文章,样本……)

  3. Named method :这是一个链接,但最后我没有得到命名方法实际上是…

任何人都可以解释什么是“命名”方法,我们在哪里使用匿名方法?

命名方法是一种可以通过名称调用的方法(例如,它是一个具有名称的函数)。 例如,您已定义一个函数来添加两个数字:

 int f(int x, int y) { return x+y; } 

您可以通过其名称调用此方法,如下所示: f(1, 2);

匿名方法是一种方法,它作为参数传递给函数而不需要其名称。 这些方法可以在运行时构造,也可以在编译时从lambda表达式求值。

这些方法通常用于LINQ查询,例如:

 int maxSmallerThan10 = array.Where(x => x < 10).Max(); 

表达式x => x < 10被称为lambda表达式,其结果是一个匿名函数,它将由Where方法运行。

如果您是初学者,我建议您先阅读更多基本内容。 查看以下链接:

让我们从一个简单的方法开始。

 void MyMethod() { Console.WriteLine("Inside MyMethod"); //Write to output } 

上面的方法是一个named-method ,它只是将Inside MyMethod写入输出窗口。

Anonymous methods是某些特殊方案(使用delegates )中使用的一些方法,其中方法定义通常较小,而您不指定方法的名称。

例如, (delegate) => { Console.WriteLine("Inside Mymethod");}

刚开始编写一些简单的程序,在适当的时候,当你使用delegates或一些高级概念时,你自己就会学习。 🙂

类比解释

通常,当我们讲故事时,我们会通过名字来引用人物:

“房地美”

“谁是弗雷迪?”

“你知道,弗雷迪,弗雷迪来自销售部门 – 那个红头发的男性家伙,把建筑物烧毁……?”

实际上,没有人关心这个人是谁,他工作的部门等等。这并不像我们会再次提到他。 我们希望能够说:“有人把我们的建筑烧毁了”。 所有其他东西(头发颜色,名称等)是无关紧要和/或可以推断。

这与c#有什么关系?

通常在c#中,如果要使用它,则必须定义一个方法:必须告诉编译器(通常):

  • 它叫什么,
  • 什么进入它(参数+他们的类型),
  • 以及应该出现什么(返回类型),
  • 以及您是否可以在家中保护自己,或者是否可以在公共场所进行。 (范围)

当您使用方法执行此操作时,您基本上使用named methods 。 但写出来:这是很多努力。 特别是如果所有这些都可以被推断出来并且你永远不会再使用它。

这基本上就是匿名方法的用武之地。它就像一个一次性的方法 – 快速而又脏的东西 – 它减少了你输入的数量。这基本上就是它们的目的。

匿名方法或匿名函数,似乎是相同的,基本上是委托。 正如您指出的链接: http : //msdn.microsoft.com/en-us/library/bb882516.aspx描述,匿名方法提供了一种简单的方法来传递方法以由另一个方法执行。 像回调一样。 另一种看待它的方法是考虑lambda表达式。

对比命名的是任何常用方法。

来自MSDN:

委托可以与命名方法相关联。 使用命名方法实例化委托时,该方法作为参数传递。 这是使用命名方法调用的。 使用命名方法构造的委托可以封装静态方法或实例方法。 命名方法是在早期版本的C#中实例化委托的唯一方法。 但是,在创建新方法是不必要的开销的情况下,C#使您能够实例化委托并立即指定委托在调用时将处理的代码块。 该块可以包含lambda表达式或匿名方法。

在2.0之前的C#版本中,声明委托的唯一方法是使用命名方法。 C#2.0引入了匿名方法,在C#3.0及更高版本中,lambda表达式取代了匿名方法,作为编写内联代码的首选方法。 但是,本主题中有关匿名方法的信息也适用于lambda表达式。 有一种情况是匿名方法提供lambda表达式中没有的function。 匿名方法使您可以省略参数列表。 这意味着可以将匿名方法转换为具有各种签名的委托。 lambda表达式无法做到这一点。 有关lambda表达式的更多信息,请参阅Lambda表达式(C#编程指南)。 创建匿名方法本质上是一种将代码块作为委托参数传递的方法。 通过使用匿名方法,可以减少实例化委托时的编码开销,因为您不必创建单独的方法。

因此,在回答有关何时使用匿名方法的问题时,MSDN说:在创建新方法的情况下,开销是不必要的。

根据我的经验,这更多的是代码重用和可读性问题。

链接:

http://msdn.microsoft.com/en-us/library/98dc08ac.aspx

http://msdn.microsoft.com/en-us/library/0yw3tz5k.aspx

希望有所帮助