Head First C# 中文版 图文皆译 第五章 封装 page199

问:为什么我在get或者set访问器中需要复杂的逻辑呢?它不只是创建字段的一种方式吗?

答:因为有的时候,设置一个字段的同时需要做一些计算或者执行某些动作。回想一下凯瑟琳的麻烦--她之所以遇到了问题就是因为重新设置人数之后没有运行重新计算装饰费的方法。而如果用一个set访问器来代替字段的话,就可以确保每次都会重新计算装饰费了。(其实,再过几页你就要这么做了!)

问:等会儿--这么说来,方法和set、get访问器还有什么区别/

答:没区别!get和set访问器是特殊种类的方法--只不过对于其他对象来说看起来像字段一样,并会在字段被设置的时候被调用。Get访问器总是返回一个与字段同类型的值,而Set访问器总是接受一个叫做value的参数,value的类型与字段相同。哦,顺便提一下,你可以说“属性”来代表“set和get访问器”。

问:那么,可以在属性中写任何类型的语句?

答:完全正确。可以写在方法中的语句都可以写到属性中。属性可以调用方法,访问字段,甚至可以创建对象、实例。但是它只有在字段被访问时才得以调用,所以如果在属性里面写一些与访问字段无关的代码是没意义的。

问:如果set访问器总是接受一个叫做value的参数的话,那它的声明中怎么没有(int value)?如果别的方法接受叫做value的参数的话就要这么写的。

答:C#被设计时就遵循避免你写编译器不需要的信息的原则。这个参数不用你显式的键入就会得以声明,如果只键入一两个当然没什么--但是如果要键入几百个的话,这就很节省时间了(更不用提它可以预防bug了)。Set访问器总是接受一个叫做value的参数,这个参数的类型总是与字段类型一样。你只需要键入“set{”,C#就明白了。你没必要键入更多,C#编译器也不会要求你键入更多。

问:等会儿--这跟不需要给构造方法写返回值类型是一个道理吗?

答:对!因为所有构造方法的返回值总是void。再让你写“void”就显得冗余了。

问:get或者set访问器可以单独只写一个吗?

答:可以!只有get访问器的时候,就是创建了一个只读的属性。举例来说,SecretAgent类就应该有一个只读的name属性:

只有set访问器的时候,就是创建了一个只写的属性,不可读。SecretAgent类的Password字段就可以采取这种方式:

这些技术在封装时都很有用。

属性(get和set访问器)是只有在别的类读写属性时才得以执行的特殊方法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值