【问题标题】:Delegate in method using variables in scope of method but outside delegate scope使用方法范围内但在委托范围外的变量在方法中进行委托
【发布时间】:2012-06-05 16:23:35
【问题描述】:

我编写了一些示例代码,其中我在方法主体中声明了一个 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(); }

【问题讨论】:

标签: c# delegates thread-safety


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-09
    • 1970-01-01
    • 2016-11-10
    相关资源
    最近更新 更多