如果属性可以存储数据(如字段那样)为什么我们仍然需要字段?
例如我有这个班,
public class Music
{
public Music() { }
public float musicBPM { get; set; }
public void addBPM()
{
this.muscBPM +=10;
}
}
它仍然有效,因为我有一个私人领域并改变其价值,对吗?
那么,如果您可以使用该属性,那么对于现场的迫切需求是什么?
答案 0 :(得分:5)
尽管自动属性模糊了这种区别,但是字段和属性之间存在根本区别:
换句话说,当你写
public float musicBPM { get; set; }
编译器创建如下内容:
private float musicBPM_property;
public float musicBPM {
get { return musicBPM_property; }
set { musicBPM_property = value; }
}
当你创建一个自动属性时,该字段仍然存在,但编译器巧妙地将它隐藏起来。
这就是为什么这些字段将继续作为.NET中的概念。但是,C#6的自动只读属性可以消除手动编写的代码中的字段。
答案 1 :(得分:2)
属性仍然需要一个字段作为后备存储库,属性实际上包含两个访问该后备字段的方法(所谓的getter和setter)。
来自msdn:
属性是一个提供灵活读取机制的成员, 写或计算私有字段的值。属性可以像它们是公共数据成员一样使用,但它们实际上是称为访问器的特殊方法。这样可以轻松访问数据,并且仍然有助于提高方法的安全性和灵活性。
答案 2 :(得分:2)
您不会为您的属性分配值...即使您在一天结束时也会将值分配给变量。
因此,当您说somevar
数据实际上被分配给场景后面的名为public int myprop
{
set { somevar = value; }
}
的变量时。
public int myprop {get; set; }
如果您对自动属性感到有点困惑,并且认为您实际上是将值分配给属性,则情况并非如此。在场景编译器后面将创建私有支持字段来保存这些值。
所以,用一句话; properties为您提供了一种封装类字段的方法。
Total