使用方法范围内但在委托范围之外的变量委托方法

本文关键字:变量 方法 范围 范围内 使用方法 | 更新日期: 2023-09-27 18:36:16

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

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

   public void MyMethod(string name, ComplexObject myObj)    {    操作导出 = () => {       用名字做某事       名称 = 名称 + 名称;       对复杂的引用对象执行某些操作        myObj.SomeMethod(name);    };    做更多的工作    例 在新线程上启动导出    System.Threading.Thread newThread = new System.Threading.Thread(new System.Threading.ThreadStart(export));    newThread.Start();    }

使用方法范围内但在委托范围之外的变量委托方法

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