书P191页 给出了一段使用private的代码 但是我照着修改类中的代码后Bug还是存在。 对于封装这个概念不是很了解……
书上P191页上的代码
类中原来的代码
窗体中的代码
窗体界面
先学习下怎么提问。首先,要学会发清晰的图片,你没有一个图片上的字能看清楚的。
其次,你应该将代码以文本的形式贴出来。
最后,说清楚什么bug,编译出错,程序结果不正确还是报出什么异常。
而且据我所知,Head First C#配有源代码,你有没有把源代码下载下来看呢。
一个基本的常识就是,代码要直接复制粘贴,而不是对着纸上的代码抄。包括你提问也是一样,你应该给出可以复制粘贴的代码,而不是一个图片。
至于你说的封装的概念,和你的程序也没什么关系。封装就是指代码的拥有者才可以访问和修改这个代码中被封装起来的成员。private protected和internal提供了3个级别的封装,这些基本概念先学明白了,再写程序。看你的书上涂涂画画,很多基本的语法都不会。一上来写复杂的自己能搞清楚么。
书中给出的这个例子用来说明封装的意义并不是很好。你可以整理一下思路,先不看代码,考虑这个简单的计算逻辑:
总费用= 餐饮费用+装饰费用
餐饮费用=( 食品费用(固定,设为常量)+饮料费用(酒精饮料/非酒精饮料))x总人数
装饰费用=(豪装/简装 均摊单人费用)x 总人数 + 一般费用(豪装/简装)
由上可见,人数变化会导致餐饮和装饰费用同时变化。
书中开始的错误例子,问题在于计算总费用的时候没有重按照人数计算装饰费用,仅仅是重算了餐饮费用,然后加上程序初始化时的装饰费用。
作者分析这个错误时说,根本原因是窗体程序没有利用现有的方法而直接访问了dinnerParty的CostOfDecoration成员,这么说略觉牵强,而且后面给出的代码并不完整。
实际上这是出现在同一个类DinnerParty内部的逻辑错误,和封装概念没什么关系,所以即使你按照书上的代码封装了NumberOfPeople,没有修改程序逻辑,仍然是错误的结果。
这是个不好的例子,没有真正说明封装的概念,反而把人弄糊涂了。