我已经创建了以下示例代码:
class Program {
static void Main(string[] args) {
var x = new ActionTestClass();
x.ActionTest();
var y = x.Act.Target;
}
}
public class ActionTestClass {
public Action Act;
public void ActionTest() {
this.Act = new Action(this.ActionMethod);
}
private void ActionMethod() {
MessageBox.Show("This is a test.");
}
}
当我以这种方式执行此操作时,y 将是一个 ActionTestClass 类型的对象(为 x 创建)。现在,当我换行时
this.Act = new Action(this.ActionMethod);
到
this.Act = new Action(() => MessageBox.Show("This is a test."));
y( Action 的目标)将为空。有没有一种方法可以让我在使用匿名操作的过程中也获得目标(示例中的 ActionTestClass 对象)?
最佳答案
缺少 Target
(iow == null
) 意味着委托(delegate)要么正在调用 static
方法,要么没有环境被捕获( iow 不是闭包,只是一个“函数指针”)。
关于c# - 获得行动目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8298027/