c#入门-自动属性,访问器访问权限

自动属性

一般情况下,类的设计都只会对外公开属性。
为了考虑到以后可能添加限制。
即便在开始设计的时候还不知道要添加什么限制。
所以开始的时候,一个属性往往长成这样:

class Monster
{
	int hp;
	public int Hp { get => hp; set => hp = value; }
}

不经过任何逻辑处理,只是为了留给以后扩展。
对于这种情况,提供了一种简写方式,这称为自动实现属性。

class Monster
{
	public int Hp { get; set; }
} 

在get访问器后直接用分号结尾,不加任何逻辑。
可以没有set或init访问器,但如果有,则他们也需要以分号结尾,不能添加逻辑。

如果需要后续修改,只需要修改这个属性的访问器就行了。
由于没有代码访问到他所控制的字段,全是访问到这个属性本身。
所以很容易修改。

匿名字段初始值

自动属性所管理的字段称为匿名字段。这是编译器在编译时添加的。
因为没有名字,所以你无法在代码里访问。

这种情况下提供了一种特殊的语法,用来给你修改初始值。
在大括号后面使用等号进行赋值,并在后面加分号。

class Monster
{
	public int Hp { get; set; } = 20;
	public int MaxHp { get; } = 100;
}

单独的访问器访问权限

自动实现属性和普通的字段相比,还有另一个区别。
由于get和set是两个不同的方法,所以可以有两个不同的访问权限。
而其中一个较大的访问权限声明在了属性前面。
另一个较小的访问权限声明在访问器前面。

class Monster
{
	public int Hp { get; private set; } = 20;
	public int MaxHp { get; } = 100;
}

这样一来,这个属性在外部是只读属性。
而在类的内部可读可写。

访问器权限并不是自动属性特有的功能,普通属性也可以使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值