C#闭包绑定

问题描述

| 给定以下内容,when0何时绑定?
 System.Timer t = new System.Timer( (a)=>{
    var foo = Messages.SelectedItem as FooBar;
 });
它是绑定的,然后执行匿名方法还是定义了该方法?     

解决方法

        
foo
根本没有绑定,因为它在匿名方法内部。它将调用Messages.SelectedItem。如果Messages是实例属性,则绑定的是\'this \'实例,该实例用于获取Messages。     ,        永远不会,由于编译时错误,您会由于BCL中没有
System.Timer
类而得到。假设您想要一个System.Threading.Timer,则在此构造函数被调用时即定义了方法的情况下,闭包将被绑定/捕获。如果要在执行方法时绑定它,则需要另一个构造函数重载并传递一个状态。
var t = new System.Threading.Timer(a =>
{
    var foo = a as FooBar;
},Messages.SelectedItem,-1,-1);
现在,当回调运行时,它将在执行回调时使用
Messages.SelectedItem
值。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...