属性经常与字段连用,并提供了get访问器和set访问器,分别用于获取或设置字段的值。
语法
public 数据类型 属性名
{
get
{
获取属性的语句块;
return 值;
}
set
{
设置属性得到语句块;
}
}
- get{}
get访问器,用于获取属性的值,需要在get语句最后使用return关键字返回一个与属性数据类型相兼容的值。
若在属性定义中省略了该访问器,则不能在其他类中获取私有类型的字段值,因此也称为只写属性。 - set{}
set访问器用于设置字段的值,这里需要使用一个特殊的值value,它就是给字段赋的值。
在set访问器省略后无法在其他类中给字段赋值,因此也称为只读属性。
通常属性名的命名使用的是Pascal命名法,单词的首字母大写,如果是由多个单词构成,每个单词的首字母大写。
namespace Test
{
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
{
if (value >= 0)
{
price = value;
}
else
{
price = 0;
}
}
}
}
}
在C#语言中可以将属性的定义简化成如下写法
public 数据类型 属性名{get;set;}
这种方式也被称为自动属性设置。简化后代码如下
public int Id{get;set;}
public string Name{get;set;}
public double Price{get;set;}
如果使用上面的方法来设置属性,则不需要先指定字段。如果要使用自动属性的方式来设置属性表示只读属性,直接省略set访问器即可。只读属性可以写成如下形式。
public int Id{get;}=1;
这里相当于将Id属性的值设置成1,并且要以分号结束。但是,在使用自动生成属性的方法时不能省略get访问器,如果不允许其他类访问属性值,则可以在get访问器前加上private访问修饰符
public int Id{private get; set;}
Id属性的get访问器只能在当前类中使用