1. 定义:
属性结合了字段和方法的多个方面。 对于对象的用户,属性显示为字段,访问该属性需要相同的语法。 对于类的实现者,属性是一个或两个代码块,表示一个 get
访问器和/或一个 set
访问器。
当读取属性时,执行 get 访问器的代码块;当向属性分配一个新值时,执行 set 访问器的代码块。
不具有set访问器的属性被视为只读属性。
不具有 get访问器的属性被视为只写属性。 同时具有这两个访问器的属性是读写属性。
2. 用途
属性具有多种用法:
- 它们可在允许更改前验证数据;
- 当数据被更改时,它们可采取行动,例如引发事件或更改其他字段的值。
3. 语法
public class Date
{
private int month;
public int Month
{
get
{
return month;
}
set
{
if ((value > 0) && (value < 13))
{
month = value; //value是外界赋的值
}
}
}
}
4. 注意点
属性可以只写get块或set块。
如果只写get不写set,那么就不能再外面赋值了。 如果只写set不写get,那么就不能在外界读取了。
可以给set或者get设置访问修饰符,来限制调用范围。
5. 属性的简写方式
public class Date
{
public int Month{get;set;} // 编译器会自动加上一个month的字段。
}
6 、 练习题
用面向对象的思维去完成下面的题
游戏中,有玩家,每个玩家有昵称,ID,游戏职业(法师、战士、射手。。。),血量,物攻,法伤,物抗,法抗,。
游戏中,还有装备,装备有物理防御、法术防御、物理攻击力,法术攻击力,血量。 玩家拥有装备后,可以提升自己的能力。
游戏中,还有多个怪物,怪物有血量,物攻,法伤,物抗,法抗,Boss的法伤,物攻和物抗,法抗,血量比较高,小兵的比较低。
玩家打怪物,怪物打玩家。
血量减少的值等于被攻击的值减去自身的抗性。
如: 玩家1的物理攻击是800,法术攻击是300,怪物的物理防御是600,法术防御是500, 玩家打怪物一下,怪物的血量减少200.
玩家打怪物两下,怪物打玩家一下,可以多个玩家打一个怪物。
无论是玩家还是怪物,当血量为0的时候则 死亡。
要求游戏职业定义为枚举、还要用到构造函数。