有什么区别(如果有的话)
public int x;
和
public int x { get; set; }
?
第一个称为字段。第二个是属性,在本例中是自动实现的属性。
属性的作用类似于字段,但使用 getter 和 setter 函数来检索和设置值。上述属性的另一种写法如下:
private int _x;
public int X
{
get
{
return _x;
}
set
{
_x = value;
}
}
这种情况下的变量_x
称为支持字段。使用自动实现的属性,您无法访问支持字段或自定义 getter/setter 中的代码,但如果您不需要,它会更短更简洁。
作为 C# 中的一条规则,大多数时候任何公共成员都应该作为属性而不是字段公开。
第一个是可以从任何地方访问的公共变量。
第二个是公共财产
有关详细信息,请查看属性教程。
属性有很多用途:它们可以在允许更改之前验证数据;他们可以透明地公开一个类上的数据,这些数据实际上是从其他来源(例如数据库)检索到的;他们可以在数据更改时采取行动,例如引发事件或更改其他字段的值。
这两者之间的区别在于,属性可以做的不仅仅是获取/设置变量。
举个例子:
private int _x;
public int x
{
get
{
//do something
return _x;
}
set
{
if(_x != value)
PropertyChanged("x");
_X = value;
}
}
当我们设置属性时 - 我们通知某些东西(PropertyChanged()
)值已更改。仅使用该字段将非常困难