在何处分配无限范围变量?

时间:2018-07-08 16:16:09

标签: c# delegates

考虑以下代码:

using System;
public delegate int IntToInt(int n);

public class Foo 
{
    static int a = 2;

    static IntToInt b(int c) 
    {
        int d = a + c;
        Console.WriteLine(d);

        return delegate(int n) { return c + n; };
    }

    public static void Main(string[] args) 
    {
        Console.WriteLine(b(3)(4));
    }
}

为什么c最有可能分配在而不是堆栈上? 我读到这是因为c具有无限范围
您能详细说明一下这个词吗?

1 个答案:

答案 0 :(得分:4)

  

为什么c最有可能在堆而不是堆栈上分配?

示例中的两个c需要分配-c的参数Foo.bc的代理权限。

  • Foo.b的参数完全按照您期望的方式分配在堆栈上。
  • 另一方面,
  • 委托的捕获是分配在堆上的,因为c的生存期与委托对象的生存期紧密相关。