如果我有 属性,我还需要一个字段吗?
If I have a property do I need a field as well?
所以在自动实现和初始化 属性 之后,我的 属性 还需要一个字段吗?
这看起来干净多了:
class A {
public int X {
get;set;
} = 1;
}
比这个:
class A {
int x = 1;
public int X {
get {
return x;
}
set {
x = value;
}
}
}
在这种情况下您不需要支持字段,但是如果您想使用例如 On属性Changed() 来操作 属性,那么您需要有一个支持字段
public int X {
get {
return x;
}
set {
x = value;
OnPropertyChanged()
}
}
在第一种情况下,编译器已经提供了一个支持字段——它只是隐含的(并且它被赋予了一个你不能在代码中引用的名称)。请注意,has 是生成代码中的一个支持字段,因为 属性 本身实际上只是一对方法,一些元数据链接它们 - 属性 不向对象添加任何状态。状态 仅 存储在字段中。
写在一行时更清晰 - 我通常将其视为:
class A
{
public int X { get; set; } = 1;
}
所以在自动实现和初始化 属性 之后,我的 属性 还需要一个字段吗?
这看起来干净多了:
class A {
public int X {
get;set;
} = 1;
}
比这个:
class A {
int x = 1;
public int X {
get {
return x;
}
set {
x = value;
}
}
}
在这种情况下您不需要支持字段,但是如果您想使用例如 On属性Changed() 来操作 属性,那么您需要有一个支持字段
public int X {
get {
return x;
}
set {
x = value;
OnPropertyChanged()
}
}
在第一种情况下,编译器已经提供了一个支持字段——它只是隐含的(并且它被赋予了一个你不能在代码中引用的名称)。请注意,has 是生成代码中的一个支持字段,因为 属性 本身实际上只是一对方法,一些元数据链接它们 - 属性 不向对象添加任何状态。状态 仅 存储在字段中。
写在一行时更清晰 - 我通常将其视为:
class A
{
public int X { get; set; } = 1;
}