仅出于测试目的,我创建了一个类 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
的新属性,其中保存一个类型为System.String
的对象,并将其初始化为“ c”。
现在,我想设置一个绑定,例如,当属性值更改时,我想增加myDatas的ID。
所以我创建了这个静态函数:
private static void SetBinding(Property p,
MyData test)
{
p.PropertyChanged += ((o, r) =>
{
test.Id++;
});
}
并将其调用到Main方法中:
SetBinding(p, myData);
SetBinding(p, myData2);
调试时,我看到ID实际增加了。看来可行,但是...我不确定。匿名函数以哪种方式跟踪要修改的变量?也许有一种情况我的实现不再起作用了?
答案 0 :(得分:2)
编译器会生成一个附加类...
[CompilerGenerated]
private sealed class <>c__DisplayClass1_0
{
public MyData test;
internal void <SetBinding>b__0(object o, PropertyChangedEventArgs r)
{
test.Id++;
}
}
...并将您的匿名函数替换为生成的类的类似函数:
private static void SetBinding(Property p, MyData test)
{
var a = new <>c__DisplayClass1_0();
a.test = test;
p.PropertyChanged += a.<SetBinding>b__0;
}