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

2021-03-29 14:25

阅读:480

标签:灵活   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 GetPerson(List 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


评论


亲,登录后才可以留言!