码迷,mamicode.com
首页 > Windows程序 > 详细

【C#】C# in deep 委托的发展

时间:2018-07-12 21:41:27      阅读:70      评论:0      收藏:0      [点我收藏+]

标签:灵活   findall   method   技术   发展   lam   简单   void   引用   

"用事件去处理程序, 进而解决问题"

          ---- 委托的目的

委托早在C#2的时候就已经初具模型, 但是并不是特别灵活, 制止C#3才在代码中被广泛使用. C#4中泛型委托, C#5中的异步委托, 委托的使用越来越灵活, 也越来越成为一个C#开发人员必备的技术.

委托有很多耳熟能详的使用之处, 匿名方法, lambda表达式, 他们都是委托的一种.

 

在研读C# in deep时候, 有一节讲的是在匿名函数中捕获变量, 单看这个节的名字就给我整的云里雾里的.

在这个节最开始讲了一个闭包的概念, 我理解的就是,  匿名函数可以使用声明这个匿名函数的函数内部定义的局部变量

delegate void TestEnClosing();
        static void EnclosingTest()
        {
            int a = 5;
            Console.WriteLine("before delegate method, a‘s value is : {0}", a);
            TestEnClosing x = delegate () {  a = 3; Console.WriteLine("delegate method a‘s value: {0}", a); };
            x();
            Console.WriteLine("after delegate method, a‘s value is : {0}", a);

        }

 

 所谓在委托中捕获变量的目的就是方便不用重新声明更多的变量, 直接使用会使代码书写的更加优雅简单.看一下下面这个例子.

有一个Person的List, 需要返回age小于一个limit的新的list, 代码可以如下:

static List<Person> GetPerson(List<Person> persons, int limit)
        {
            return persons.FindAll(delegate (Person person)
           {
              return person.age < limit;
           });
        }

 

这里有个小tip关于捕获变量的生命周期: 对于一个捕获变量, 只要委托还在引用, 则会一直存在.

在以下情况下, 考虑是否有使用捕获变量的必要:

1. 使用和不使用代码都同样简单. 那么不推荐使用

2. 捕获由for或者foreach语句声明的变量, 要慎用

 

【C#】C# in deep 委托的发展

标签:灵活   findall   method   技术   发展   lam   简单   void   引用   

原文地址:https://www.cnblogs.com/it-dennis/p/9156832.html

(0)
(0)
   
举报
评论 一句话评论(0
0条  
登录后才能评论!
© 2014 mamicode.com 版权所有 京ICP备13008772号-2
迷上了代码!