作者evirtues (don't care)
看板C_Sharp
标题Re: [问题] 书中的问题
时间Sun Dec 26 22:01:52 2010
※ 引述《amonsat (amonsat)》之铭言:
: 这是一本叫深入浅出C#的书(97出版),在第201页有个改错的习题,
: 那本书有解答也就是我标的#1,#2,#3,#4
: ,以下是程式码(注解的部分是我的改错):
: class GumballMachine
: {
: private int gumballs;
: private int price;
: public int Price
: {
: get
: {
: return price;
: }
: }
price是private field而取值方式是用public field(Price)来取,
依照定义price就叫做支援栏位(backing field)。
建议看英文版的MSDN比较清楚
: public GumballMachine(int gumballs, int price)
: {
: gumballs = this.gumball; //应该改成this.gumball=gumball;#1
: price = Price; //应该改成Price=price;#2
: }
: public string DispenseOneGumball(int price, int coinsInserted)//我觉得没错啊#3
引数用price是OK的,只是会遮蔽掉先前所宣告的price,
在这个function下所使用的price就是指这个引数,
也就是你在外部呼叫时所喂进去的值,其实书应该建议你去掉这个引数。
: {
: //下面应该改成if(coinsInserted >= price)
: if (this.coinsInserted >= price)//check the field(这个是书上写的)#4
书上应该是要你使用外面宣告的price而非引数的price,
所以应该要用this.price取得外面那个price的值。
所在的类别内没有coinsInserted栏位所以this.coinsInserted会有问题。
: {
: gumballs -= 1;
: return "Here's your gumball";
: }
: else
: {
: return "Please insert more coins";
: }
: }
: }
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.231.107.141
1F:推 amonsat:我想问的是这里所称"遮蔽"先前所宣告的price 12/26 23:10
2F:→ amonsat:是说会把先前设定好price的值给覆盖吗? 12/26 23:10
3F:→ andymai:不是覆盖~而是你不加this~会误取~所以这样写是自找麻烦 12/26 23:12