原文链接:https://zhidao.baidu.com/question/66380053.html
属性是类提供给外部调用时,用的。
使用方法:对象.属性
使用目的:设置或读取一个值。
字段是:类内部用的。存储数据。
原文链接:http://www.cnblogs.com/netlyf/archive/2010/12/20/1910977.html
从两者的声明上来看:
公共字段只是类用public修饰符所公开的简单公共变量;属性则是对字段的封装,它使用get和set访问器来控制如何设置或返回字段值。
由于属性的实质是方法(get或set方法),在IL中是没有属性的概念的。所以对于开发过程中常用的赋值和取值操作来说,使用公共变量肯定会比使用属性速度要快,性能上也稍高(方法和变量哪个速度不用说了吧)。
公共字段虽然在速度上快,但它必须开放字段为public,这样一来对象的调用者便可以直接修改其值,值的内容是否合法,运行中是否会出错,就没有了保障,进而会大大降低类的可重用性;相反,属性类似于方法,它可以对存入的变量的值进行处理,如果觉得该值不合法,可以就地变换或者直接提出警告。这对该类的对象的使用安全有很大好处,在运行过程中,因公共变量值的错误而产生的问题会大大减少。
从上述内容来看,两者各有优缺点,在实际项目开发过程中,我们究竟选择使用哪一种方式呢?
如果满足下面几个条件,那么我们便可以大胆地使用公共字段:
1. 允许自由读写;
2. 取值范围只受数据类型约束而无其他任何特定限制;
3. 值的变动不需要引发类中其它任何成员的相应变化;
属性的使用条件则恰好跟变量相反,只要满足下面任何一个条件,就应该使用属性:
1. 要求字段只能读或者只能写;
2. 需要限制字段的取值范围;
3. 在改变一个字段的值的时候希望改变对象的其它一些状态;
总结:虽然在实际项目的开发过程中,公共字段和属性在合适的条件下都可以使用,但是我们应该尽可能的使用属性(property),而不是数据成员(field);把所有的字段都设置为私有字段,如果要暴露它们,则把它们封装成属性,这也是微软推荐的方式。
原文链接:https://www.zhihu.com/question/25424659
最直观的区别是,属性可以单独设置读/写的权限,而字段不能。
public class A
{
private int i;//字段
public int I //属性
{
get { return i;} //取属性I实际返回字段i的值
set
{
if (value > 0)
{
i = value; //满足条件给字段i一种赋值
}
else
{
i = 0; //不满足条件赋另一种值
}
}
}
}
属性一般是public,而字段private
属性名称首字母大写,字段通常第一个是下划线_
private int _age;
public int Age
{
get{return _age;}
set{_age = value;}
}
简化,可以这么写
public int Age{get;set;}
原文链接:http://www.jb51.net/article/78914.htm
表达式主体定义
直接只返回表达式结果的属性很常见。下面的语法快捷方式使用 => 来定义这些属性:
public string Name => First + " " + Last;
属性必须为只读,并且你不能使用 get 访问器关键字。