学习C#时常常有人对属性和字段的区别弄不清楚,下面我们以几个例子说明一些这两个定义。
一、C#中属性和字段的区别为:访问性不同、包含不同、安全性不同。
a、访问性不同
1、C#中属性:C#中属性是限制只能给变量赋于某个范围的值,是有限制的访问私有变量。
2、C#中字段:C#中字段是自由的、毫无限制的访问公有变量。
b、包含不同
1、C#中属性:C#中属性中包含两个块:set和get,set块负责属性的写入工作,get块负责属性的读取工作。
2、C#中字段:C#中字段中不包含set和get两个块,可以直接进行字段写入和读取。
c、安全性权不同
1、C#中属性:C#中属性因为是私有的、写入和读取需要调用set和get块,所以当不在本类中使用时可以保证使用属性的安全性。
2、C#中字段:C#中字段是公有的、写入和读取不需要调用set和get块,所以当不在本类中使用时无法保证使用字段的安全性(当然字段也可以设置为私有的,但是这种情况只能再本类中使用,无法在类的外部使用了)
d、其他
属性没有存储数据的功能,数据都存在字段中,所以只有修改字段的数据才能更改数据,修改属性的值没用。
二、上面了解了属性和字段的区别后,咱们分别来讲解一下下面的代码
下面三种写法的区别
写法1:
public string nValue
写法2:
public string nValue { get; set; }
写法3:
private string nValue
public string NValue
{
get { return nValue; }
set { nValue = value; }
}
写法4:
public string nValue { get; }
写法5:
private string nValue
public string NValue {
get { return nValue; }
}
首先写法1,没有get和set块,因此写法1是字段的定义写法
写法2和写法3都具有get和set块,因此是典型的属性定义写法
写法4和写法5虽然都具有get方法,但是我们在vs中测试一下代码可以发现虽然写法4在语法监测上仅仅出现了一个警告而已,
但是真正编译时才发现,这是无法编译的,这种语法是错误的。
而写法5则只是在语法上给了一个警告,而编译可以正常运行。因此写法5也是一个只具有读取权限的属性。