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

使用自动属性来结束这个类

看起来牛饲料计算器工作的不错。试一下--运行一下并按按钮。然后把牛数改为30并再点击按钮。然后再把牛数改为5和20。下面是输出窗口应该看起来的样子:

但是这个类有个问题。给窗体添加一个按钮让它执行下面的语句:

farmer.BagsOfFeed = 5

再次运行你的程序。不点击新添加的按钮的话,看起来还好。但是点击了这个新添加的按钮,再点击Calculate按钮的话,输出结果将会告诉你你需要五袋饲料--不管牛数设置为多少!

把Farmer类完全封装

问题就在于类不是完全封装的。你使用属性封装了NumerOfCows,但是BagsOfFeed还是public的。这是一个很普遍的问题。实际上,由于这个问题太过于普遍,C#提供了一个方式来自动解决它。把BagsOfFeed字段改为自动属性就可以了。IDE使得添加自动属性很是简单。就这样做:

 把Farmer类中的BagsOfFeed字段删掉。把光标定位到字段原来所在地,并键入prop然后按tab键两次。IDE将会向你的代码添加这行代码:

public int MyProperty  { get; set; }

按tab键--光标将会定位到MyProperty。把它的名字改为BagsOfFeed:

public int BagsOfFeed  { get; set; }

现在你得到了一个代替字段的属性。C#对待这个,就会像对待后台字段一样(就像NumberOfCows属性后面的numberOfCows私有字段一样)。

这还不足以解决问题。有一个简单的解决方法--只读属性:

public int BagsOfFeed  { get;private set; }

重新生成代码--你将会在新添加的按钮设置BagsOfFeed的那一行代码处发现一个错误,它告诉你set访问器是私有的。现在Farmer类封装的好多了!

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值