CH09_属性


本章目标

  • 掌握get和set访问器的使用
  • 掌握属性的定义与使用

属性

概述

属性经常与字段连用,并提供了 get 访问器和 set 访问器,分别用于获取或设置字段的值。

get 访问器和 set 访问器的使用与方法非常类似,可以在操作字段时根据一些规则和条件来设置或获取字段的值。

此外,为了保证字段的安全性,还能选择省去 get 访问器或 set 访问器。

语法

1
2
3
4
5
6
7
8
9
10
11
12
public    数据类型    属性名
{
get
{
获取属性的语句块;
return 值;
}
set
{
设置属性得到语句块;
}
}

get{}访问器

​ get 访问器,用于获取属性的值,需要在 get 语句最后使用 return 关键字返回一个与属性数据类型相兼容的值。 若在属性定义中省略了该访问器,则不能在其他类中获取私有类型的字段值,因此也称为只写属性。

set{}访问器

​ set 访问器用于设置字段的值,这里需要使用一个特殊的值 value,它就是给字段赋的值。 在 set 访问器省略后无法在其他类中给字段赋值,因此也称为只读属性。

特点

通常属性名的命名使用的是 Pascal 命名法,单词的首字母大写,如果是由多个单词构成,每个单词的首字母大写。

由于属性都是针对某个字段赋值的,因此属性的名称通常是将字段中每个单词的首字母大写。例如定义了一个名为 name 的字段,属性名则为 Name。

案例1: 定义一个图书信息类(Book),在类中定义图书编号(id)、图书名称(name)、图书价格(price)3 个字段,并分别为这 3 个字段设置属性,其中将图书名称设置为只读属性。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
class Book
{
private int id;
private string name;
private double price;
//设置图书编号属性
public int Id
{
get
{
return id;
}
set
{
id = value;
}
}
//设置图书名称属性
public string Name
{
get
{
return name;
}
}
//设置图书价格属性
public double Price
{
get
{
return price;
}
set
{
price = value;
}
}
}

案例2: 假设上面实例中的图书价格要求是大于 0 的,如果输入的值不满足条件,则将图书价格设置为 0。修改后的图书价格字段的属性代码如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public double Price
{
get
{
return price;
}
set
{
if(value >= 0)
{
price = value;
}
else
{
price = 0;
}
}
}

简写

通过上面的实例可以看出,在定义字段属性时,属性的作用就是为字段提供 get、set 访问器,由于操作都比较类似,在 C# 语言中可以将属性的定义简化成如下写法。

1
public    数据类型    属性名{get;set;}
1
2
3
4
public int Id{get; set;}
public string Name{get; set;}
public double Price{get; set;}

如果要使用自动属性的方式来设置属性表示只读属性,直接省略 set 访问器即可。只读属性可以写成如下形式.

1
public int Id{get;}=1;

这里相当于将 Id 属性的值设置成 1,并且要以分号结束。但是,在使用自动生成属性的方法时不能省略 get 访问器,如果不允许其他类访问属性值,则可以在 get 访问器前面加上访问修饰符 private,代码如下。

1
public int Id{private get; set;}

将属性前的public改成private也行。

快速生成属性

  1. 此外,使用 Visual Studio 提供的界面操作方法也可以实现对字段生成属性的操作,打开 Book 类后选中要生成属性的字段,在菜单栏中依次选择“编辑”一“重构” 一 “封装字段”命令,如下图所示。

  2. 用户还可以右击设置好的字段,此时会弹出如下图所示的菜单。

课后作业

1.定义用户类User,包含姓名、年龄、性别、身高、生日等属性。

2.給用户类添加方法,实现自我介绍的功能。