学习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在语法监测上仅仅出现了一个警告而已,

关于C#中get:和set;在类中定义属性的用法_属性

但是真正编译时才发现,这是无法编译的,这种语法是错误的。

关于C#中get:和set;在类中定义属性的用法_字段_02

而写法5则只是在语法上给了一个警告,而编译可以正常运行。因此写法5也是一个只具有读取权限的属性。