在面向对象程序设计中,属性是访问对象存储数据的首选方式。
一般不要直接公开类的变量成员,即便是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的