3

我编写了一些示例代码,其中我在方法主体中声明了一个 Action 委托,其中传递了两个参数,然后由委托代码使用,而这些参数没有传递到 delagte。对我来说,将这些参数也明确地传递给代表似乎更干净,但在这种情况下我不是,这段代码可以正常工作。

我想知道.NET 如何使这些引用在现在在新线程上运行的导出委托中保持可用。

    public void MyMethod(字符串名称,ComplexObject myObj)
    {

    动作导出 = () => {
       //用名字做一些事情
       姓名=姓名+姓名;
       //对复杂的引用对象做一些事情
        myObj.SomeMethod(name);
    };

    // 做更多的工作
    // 示例在新线程上启动导出
    System.Threading.Thread newThread = new System.Threading.Thread(new System.Threading.ThreadStart(export));
    newThread.Start();
    }
4

1 回答 1

3

编译器创建一个特殊类型来保存这些变量。然后,每次调用该方法时,它都会实例化该类型的实例,而不是将这些变量存储在堆栈中。然后,匿名委托使用对该新实例的引用来访问这些变量。

于 2012-06-05T16:26:16.233 回答