之间有什么区别(如果有的话)
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()
)值已更改。仅凭该领域很难做到
第一个是公共变量,可以从任何地方访问。
第二个是公共财产
有关详细信息,请查看属性教程。
属性有许多用途:它们可以在允许之前验证数据 改变;他们可以透明地在类上公开数据,其中数据 实际上是从其他来源(例如数据库)检索的;他们 可以在数据发生更改时执行操作,例如引发事件,或者 更改其他字段的值。