【发布时间】:2019-09-01 17:33:39
【问题描述】:
仅出于测试目的,我创建了一个类 MyData,其中包含一个名为 Id 的 int 属性。
public class MyData
{
public int Id { get; set; }
}
然后,在 App Console 的 Main 函数中,我初始化了这个类的两个实例。
MyData myData = new MyData() { Id = 1 },
myData2 = new MyData() { Id = 2 };
还有一个名为 Property 的新对象。很简单,一个对象持有一个值并在该值发生变化时触发一个事件。
Property p = new Property("Test",
"System.String",
"c");
因此,我只需创建一个名为 Test 的新属性,其中包含一个初始化为“c”的 System.String 类型的对象。
现在,我想设置一个绑定,例如当 Property 的值发生变化时,我想增加 myDatas 的 Id。
所以我创建了这个静态函数:
private static void SetBinding(Property p,
MyData test)
{
p.PropertyChanged += ((o, r) =>
{
test.Id++;
});
}
并将其调用到 Main 方法中:
SetBinding(p, myData);
SetBinding(p, myData2);
调试,我看到ID实际上是递增的。所以它似乎有效,但是......我不确定。匿名函数以何种方式跟踪要修改的变量?也许在某种情况下,我的实现不再起作用了?
【问题讨论】:
-
如果您真的想了解发生了什么,您应该在 ILSpy(或类似工具)中打开此程序集并查看代码是如何翻译的。您将看到上面链接中解释的详细信息。
标签: c# events anonymous-function