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

时间:2014-01-01 13:54:29

标签: c# anonymous-function anonymous-methods

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

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

的研究
  1. Method是一个语句块,用于代码可重用性 &安培;它还支持使用不同的SIGNATURE进行重载....对于ex: drawShape(2pts),drawShape(3pts)等...

  2. Anonymous方法是一个包含语句块的方法,但没有 名字....(因为我们遇到的问题还不成熟,我们遇到的情况     匿名方法......任何文章,样本......)

  3. Named method:这是a link但最后我没有得到Named Method实际上是什么......

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

5 个答案:

答案 0 :(得分:8)

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

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

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

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

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

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

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

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

答案 1 :(得分:1)

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

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

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

Anonymous methods是在某些特殊情况下使用的一些方法(使用delegates时),其中方法定义通常较小,而您没有指定方法的名称。

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

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

答案 2 :(得分:1)

类比解释

通常情况下,当我们讲故事时,我们会按名字引用人物:

  

&#34;房地&#34;

     

&#34;弗雷迪是谁?&#34;

     

&#34;你知道,弗雷迪,弗雷迪来自销售部 - 那个红头发的男性家伙,把建筑物烧毁......?&#34;

实际上,没有人关心 这个人,他工作的部门等等。它不像我们会再次提及他。我们希望能够说:&#34;一些家伙烧毁了我们的建筑物&#34;。所有其他的东西(头发颜色,名称等)是无关紧要和/或可以推断。

这与c#有什么关系?

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

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

使用方法执行此操作时,基本上使用的是named methods。但要写出来:这需要付出很多努力。特别是如果可以推断出所有这一切,那么你再也不会再使用它了。

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

来自MSDN:

  

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

  

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

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

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

链接:

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

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

希望有所帮助