在面向对象程序设计中,属性是访问对象存储数据的首选方式。
一般不要直接公开类的变量成员,即便是get访问器和set访问器并无数据访问规则。
属性的声明
1. 完整声明
在代码中输入propfull ,并连续按两下tab键
高亮的部分是可以修改的部分,按tab键可以跳转到第二个修改的部分
myVar是被属性包装的字段的名字
MyProperty是属性的名字
对于get访问器和set访问器:
- get访问器的主要目的是为外部读取提供数据,因此在get访问器的语句块末尾,应包含向外部返回值的return语句
- set访问器的主要目的是将外部数据写入对象,因此在set访问器中带有一个特殊的关键字value,如果把外部数据看作实参,value就是属性的形式参数
同样的定义一个静态属性Amount:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace PropertyExample
{internal class Program{static void Main(string[] args){try{Student.Amount = 100;Console.WriteLine(Student.Amount);}catch (Exception ex){Console.WriteLine(ex.Message);}Console.ReadLine();}}class Student{private static int amount;public static int Amount{get { return amount; }set { if(value>=0){Student.amount = value;}else{throw new Exception("Amount must greater than 0");}}}}
}
分析代码:
- 定义了一个私有的静态整型变量
amount
。- 定义了一个静态属性
Amount
,它具有获取器(get
)和设置器(set
)。
- 设置器检查传入的
value
是否大于等于 0。如果是,则将amount
设置为value
;如果不是,则抛出一个异常。- 获取器返回私有变量
amount
的值。
2.简略声明
常用来传输数据,不对字段进行保护
在代码中输入prop ,并连续按两下tab键
属性与字段的关系
一般情况下,它们都用于表示实体(对象或类型)的状态
属性大多数情况下是字段的包装器(wrapper)
建议:永远使用属性(而不是字段)来暴露数据,即字段永远都是private或protected的