鉴于以下内容,何时foo
绑定?
System.Timer t = new System.Timer( (a)=>{
var foo = Messages.SelectedItem as FooBar;
});
是否绑定了匿名方法,或者定义了方法?
答案 0 :(得分:4)
从来没有,因为编译时错误,你会得到BCL中没有System.Timer
类。假设你想要一个System.Threading.Timer,那么在调用这个构造函数时绑定/捕获闭包,即定义方法。如果要在执行方法时绑定它,则需要另一个constructor overload并传递状态。
var t = new System.Threading.Timer(a =>
{
var foo = a as FooBar;
}, Messages.SelectedItem, -1, -1);
现在,当回调运行时,它将在此回调执行时使用Messages.SelectedItem
值。
答案 1 :(得分:4)
foo
完全没有约束,因为它是匿名方法的内部。它将调用Messages.SelectedItem。如果Messages是一个实例属性,那么绑定的是'this'实例,它用于获取Messages。