• C#中的匿名方法


    C#中的匿名方法是在C#2.0引入的,它终结了C#2.0之前版本声明委托的唯一方法是使用命名方法的时代。虽然在 C# 3.0 及更高版本中,Lambda 表达式取代了匿名方法,作为编写内联代码的首选方式。但是,匿名方法的信息同样也适用于 Lambda 表达式,可以说 Lambda 表达式就是匿名方法演变过来的,这点后续博文会讲解推演的过程。  我们可以使用匿名方法来忽略参数列表。 这意味着匿名方法可转换为具有各种签名的委托,而这对于 Lambda 表达式来说是不可能的。 学好匿名方法,才能更加深刻地理解好 Lambda 表达式

    在说匿名方法的使用之前,先来说说匿名方法的其他叫法。匿名方法也有人叫匿名委托、匿名函数,虽然现在普遍通用,但是还是有点区别的。msdn官网上说:要将代码块传递为委托参数,创建匿名方法则是唯一的方法。这里的匿名方法就是官方的说法,而因为匿名方法就是为了将代码块传递为委托参数,因此也有人叫匿名委托,包括笔者也喜欢这种称呼,我觉得这样叫通俗易懂。至于匿名函数,因为C#中“方法”(Method)的概念有些语言叫“函数”(Function),因此匿名方法也被人叫做匿名函数。然而在msdn文档介绍中匿名函数包括了Lambda 表达式和匿名方法,可以说匿名函数是更高的一级,所以说最官方的叫法还是匿名方法,当然其他的叫法流传也甚广,听得懂就行了,没必要纠结。

    接下来说说匿名方法的写法规则,先上例子:

    delegate(int i) { return i > 0; }

    它遵循这样的格式书写:delegate(形参表){方法体代码},可以类比js中匿名函数的写法来记忆。
    那么匿名方法运用在哪里呢?怎么使用呢?当你需要一个临时方法,该方法使用次数极少或者你需要的这个方法的代码很简短,那么你就可以使用匿名方法。给个简单的例子,如果需要在一个整型集合中筛选出符合条件的新集合,如下

    List<int> list = new List<int>() { 1, 2, 3, 4, 5, 6 };
    //假设需要从list集合中获取大于3的所有元素以新集合返回
    var newlist = newlist.FindAll(GetNewList);

    GetNewList()为另外定义的和委托Predicate<T>具有同签名的方法(Predicate<T>是系统内置委托,后续博文会讲)
    GetNewList()定义如下:

    bool GetNewList(int i)
        {
             return i > 3;
        }

    以上是没有使用匿名方法时的写法,如果使用了匿名方法,你就会发现一切变得如此简便,

    List<int> list = new List<int>() { 1, 2, 3, 4, 5, 6 };
    var newlist = list.FindAll(delegate(int i) { return i > 3; });

    通过对比,可以发现使用匿名方法能够提供与先前命名方法相同的功能,但是它已经不再需要一个在关联到委托之前就明确创建的方法了,因此也减少了实例化委托所需的编码系统开销,这就是它的最大好处。

  • 相关阅读:
    C#接口入门学习
    消息队列接收时报错:对消息队列系统的访问被拒绝
    给某做测试的好友的建议
    在不同的Sql Server 数据库服务器(不同机器)导数据。
    如何让开发人员更好测试?
    存储过程初探
    语音报警.NET开发初探
    vs2010下Siverlight开发环境安装
    C# HttpWebRequest 从google服务器获取google的PageRank PR值
    创建进程API CreateProcess Demo
  • 原文地址:https://www.cnblogs.com/0weibin/p/3953743.html
Copyright © 2020-2023  润新知