【发布时间】:2015-05-26 06:53:11
【问题描述】:
为什么 C# lambda 表达式不能使用实例属性和字段,什么时候在类作用域中使用?看这个例子:
public class Point:INotifyPropertyChanged
{
public float X {get; set;}
public float Y {get; set;}
PropertyChangedEventHandler onPointsPropertyChanged = (_, e) =>
{
X = 5;
Y = 5; //Trying to access instace properties, but a compilation error occurs
};
...
}
为什么不允许这样做?
编辑
如果我们能做到:
public class Point:INotifyPropertyChanged
{
public float X {get; set;}
public float Y {get; set;}
PropertyChangedEventHandler onPointsPropertyChanged;
public Point()
{
onPointsPropertyChanged = (_, e) =>
{
X = 5;
Y = 5;
};
}
...
}
为什么我们不能像类范围内的其他字段一样初始化onPointsPropertyChanged?例如:int a = 5。 onPointsPropertyChanged 字段将在构造函数执行后始终使用。
【问题讨论】:
-
该字段在调用初始化程序时绑定到 this.X 和 this.Y,因此如果它们不可用,则它不起作用。直到构造函数执行之后,您才使用 onPointsPropertyChanged 并不重要。