5.5 匿名方法中的捕获变量

    class Program
    {
        static void Main(string[] args)
        {
            MethodInvoker m = CreateInvoker();
            m();
            m();

            Console.ReadKey();
        }
        static MethodInvoker CreateInvoker()
        {
            int count = 5;
            MethodInvoker ret = delegate
              {
                  Console.WriteLine(count);
                  count++;
              };
            ret();
            return ret;
        }
    }

5.5.5 局部变量实例化

使用多个委托来捕捉多个变量实例

 1     class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             List<MethodInvoker> list = new List<MethodInvoker>();
 6             for (int i = 0; i < 5; i++)
 7             {
 8                 int a = i * 10;
 9                 list.Add(()=>
10                 {
11                     Console.WriteLine(a);
12                     a++;
13                 });
14             }
15
16             Console.WriteLine("list======================");
17             foreach (var item in list)
18             {
19                 item();
20             }
21
22             Console.WriteLine("list[0]======================");
23             list[0]();
24             list[0]();
25             list[0]();
26
27             Console.WriteLine("list[1]======================");
28             list[1]();
29
30             Console.ReadKey();
31
32             /*
33             list======================
34             0
35             10
36             20
37             30
38             40
39             list[0]======================
40             1
41             2
42             3
43             list[1]======================
44             11
45              */
46         }
47     }

原文地址:https://www.cnblogs.com/kikyoqiang/p/10012920.html

时间: 2024-11-08 05:09:10

5.5 匿名方法中的捕获变量的相关文章

【.Net基础拾遗】匿名方法中的捕捉变量(探讨文)

最近在和朋友讨论的时候发现了一个很有意思的问题,就是捕捉变量,我现在下面把代码贴出来,大家可以先猜猜结果,然后我们在一起讨论为什么. 1 public class Test 2 { 3 private int k = 0; 4 private List<Action> dg1s = new List<Action>(), dg2s = new List<Action>(), dg3s = new List<Action>(); 5 public void f

C#:在匿名方法中捕获外部变量

先来一段代码引入主题.如果你可以直接说出代码的输出结果,说明本文不适合你.(代码引自<深入理解C#>第三版) class Program { private delegate void TestDelegate(); static void Main(string[] args) { TestDelegate[] delegates = new TestDelegate[2]; int outside = 0; for(int i = 0; i < 2; i++) { int insid

匿名方法中的变量

前面一篇文章看到了C# 2.0中通过匿名方法来简化委托,下面来看看匿名方法中的变量. 闭包和不同的变量类型 闭包的基本概念是:一个函数除了能够通过提供给它的参数与环境交互之外,还能同环境进行更大程度的互动.对于C# 2.0中出现的匿名方法的闭包表现为,匿名方法能使用在声明该匿名方法的方法内部定义的局部变量. 在进一步了解闭包之前,我们先看看下面两个术语: 外部变量(outer variable):是指其作用域(scope)包括一个匿名方法的局部变量或参数(ref和out参数除外) 被捕捉的外部变

CI控制器中设置在其它方法中可用的变量

开发过程中,某些变量可能需要被控制器中的其它方法所调用,这个变量改怎么设置呢? 其实可以用ci的$this->load->vars($array);和$this->load->get_var($key);来实现. 数组可以在构造函数中设置,在方法中可以用get_var($key)获取value. class User extends CI_Controller{ public function __construct() { parent::__construct(); $arr

不能用private修饰方法中定义的变量

在敲代码时发现了一个自己之前没有注意到点:(确切来说是没有认真理解权限修饰符)在方法中定义变量时,不能加权限修饰符原因如下: 原文地址:https://blog.51cto.com/14234228/2468546

HTML代码中在两个匿名函数中使用同名变量出现bug而引起的变量作用域的思考

在学习HTML的时候,为了方便地对同一个css样式的不同值的效果进行对比,我做成了下面这个样子. 代码也是很典型的用于展示的格式(p元素的内容随便写的): 1 <head> 2 <style> 3 p{ 4 border: medium solid black; 5 padding: 5px; 6 margin: 5px; 7 text-justify:inter-word; 8 } 9 button{ 10 margin: 5px; 11 } 12 </style>

C#基础—匿名方法(Anonymous Mehod)

1.引入匿名方法 早在C# 2.0中就提出了匿名方法,实现了以一种内联的方式声明委托,在此之前,声明委托唯一的方法是"命名方法",虽然 C# 3.0 里有了lambda ,使得写内联代码更加简洁和方法,但是匿名方法依然有他的用处,匿名方法提供了可以忽略参数列表的能力. 2.匿名方法的使用和注意点 什么匿名方法?简单的理解就是没有定义名字的方法(其实编译器还是帮我们生成了一个方法).代码的实现就是把方法的定义和方法的实现内联到了一起. 先看个演示例子: 1 class Program 2

C# 2.0 中的新增功能03 匿名方法

连载目录    [已更新最新开发文章,点击查看详细] 在 2.0 之前的 C# 版本中,声明委托的唯一方式是使用命名方法. C# 2.0 引入匿名方法,在 C# 3.0 及更高版本中,Lambda 表达式取代匿名方法作为编写内联代码的首选方式. 但是,本主题中有关匿名方法的信息也适用于 Lambda 表达式. 在有一种情况下,匿名方法提供 Lambda 表达式中没有的功能. 使用匿名方法可省略参数列表. 这意味着匿名方法可转换为具有多种签名的委托. Lambda 表达式无法实现这一点. 有关 L

javaz中向方法中传入变量,数据有的发生改变有的没有改变的原因

//在栈里面的数据不具备内存地址,方法运行创建,方法结束销毁.变量----也就是在栈中的基本数据 方法中的变量:    基本数据类型----变量==基本数据(8大类型)    引用数据类型----变量==内存地址                在方法中定义的变量,方法结束后都会销毁.(基本数据(8大类型)和内存地址被销毁)    in (Object    obj){        }        out(    ){        //进入的时候会创建一个与变量相同的变量(局部/成员/静态)