gpt4 book ai didi

c# - 使用方法范围内但在委托(delegate)范围之外的变量在方法中进行委托(delegate)

转载 作者:行者123 更新时间:2023-11-30 16:24:24 27 4
gpt4 key购买 nike

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

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

    public void MyMethod(string name, ComplexObject myObj)    {    Action export = () => {       //do something with name       name = name + name;       //do something with complex reference object        myObj.SomeMethod(name);    };    // do more work    // example launch export on a new thread    System.Threading.Thread newThread = new System.Threading.Thread(new System.Threading.ThreadStart(export));    newThread.Start();    }

最佳答案

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

关于c# - 使用方法范围内但在委托(delegate)范围之外的变量在方法中进行委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10901051/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com