主题:这篇文章我来说下属性(Properties)和字段在C#中的关系。首先申明一下,这里讲的属性就是通 常说的包含get,或者是set访问器的属性,不是属性 (Attribute)。我们写程序的时候大多都会用到实体 类,而生成实体类,我们都会申明一些常规属性或者是自动实现的属性。至于到底选用哪一种属性,或者 说是否可以直接用字段代替呢?
常规属性和自动实现属性的区别:
一个完整的常规属性由以下几部分构成:
1:私有字段,用来存储变量(后备存储),这个字段之所以是私有的,是为了让它只能通过属性来赋值 。
private string _sName;
2:一个get访问器,它负责读取数据,用于返回字段值或者是用于计算并返回字段值。以return或者 是throw语句终止。其中可以包含些简单的逻辑处理,例如数据验证等等。
get
{
//电脑价格,如果小于零,则返回0,说明数据不正常
return _computerPrice >= 0 ? _computerPrice : 0;
}
说明:get访问器是读取数据,所有不要在代码块中修改属性状态。下面的代码是不被推荐的。
private string _sName;
public string sName
{
get
{return (_sName+"");}
}
3:一个set访问器,负责给属性赋值,类似于一个返回类型为void的方法,可以包含逻辑处理,例如可 以根据默认的值通过计算后返回结果。
常规属性分类:
1:按访问修饰符来分:可将属性标记为 public、private、protected、internal 或 protected internal。这些访问修饰符定义类的用户如何才能访问属性。
2:属性还可以标记成,静态属性,实例属性,虚属性,抽象属性,需要注意的是,如果属性已经标记 成静态(static ) 的,那么后面不能和虚(virtual),抽象(abstract),重写(override)混用。
3:同一属性如果只包含get访问器,我们称之为只读属性,如果只包含set访问器,叫可写属性,如果 即有get, 又有set访问器,我们叫可读可写属性。
什么是自动实现的属性?
当属性访问器中不需要其他逻辑时,自动实现的属性可使属性声明变得更加简洁。当您如下面的示例 所示声明属性时,编译器将创建一个私有的匿名后备字段,该字段只能通过属性的 get 和 set 访问器进 行访问。
public string sName
{
get;
set;
}