一.字段:
字段是储存类要满足其设计所需要的数据,是与类相关的变量。
二.属性:
1.在C#中可以自由的、毫无限制的访问公有字段,但在一些场合中,我们需要只能给字段赋于某个范围的值、或是要求字段只能读或只能写,或是在改变字段时能改变对象的其他一些状态,这些单靠字段是无法做到的,于是就有了属性。
2.属性有两个方法:get和set。
get访问器返回与声明的属性相同的数据类型,表示的意思是调用时可以得到内部字段的值或引用;
set访问器没有显示设置参数,但它有一个隐式参数,用关键字value表示,它的作用是调用属性时可以给内部的字段或引用赋值。
简单说就是get块负责属性的读取工作,set块负责属性的写入工作。在两个块中都可以做一些其他操作,如在set中验证赋的值是否符合要求并决定是否进行赋值。当缺少其中一块时属性就只能读或只能写,set和get块中属性必需有一个,因为即不能读又不能写的属性是没有意义的。
下面通过一个例子来加深理解:
class Product //商品类 { //私有字段 private string pname; //商品名称 private float price; //商品单价 private int pcount; //商品数量 //属性 //可读写 public string Pname { get { return pname; } set { pname = value; } } //可检测赋值是否正确 public float Price { set { if (value >= 0) price = value; else throw new Exception("商品价格不正确"); } get { return price; } } }
三.属性与字段的联系:
属性其实就是对私有字段的读取和写入,以便做些公有字段无法完成的任务,它的使用方式和公有字段完全一样,所以可以理解成属性是为了满足对公有字段的特殊需求而产生的附属品,使得在保证封装性的基础上实现了访问私有成员的便捷性。属性和字段都是类的成员。
当我们选择使用属性还是使用字段时,主要看需求,如果不需设置访问权限、不需在赋值时检测值是否满足要求、不需要在赋值时修改对象其他一些状态等特殊的需求时,使用公有字段即可,否则就使用属性。
四.属性与字段的区别:
1.通常字段都是private,即私有的变量;而属性都是public,即公有的变量。
2.字段的名称一般首字母小写或前加“_”; 属性的名称一般首字母大写。
3.属性可以是抽象的,而字段要具有实际的意义。
4.属性是类提供给外部使用的,可以通过" 对象.属性" 设置或读取 一个值 ;字段是类内部用来存储数据的。
5.属性可以进行数据绑定,保证安全,但没有存储功能。