A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 岳珅 于 2013-2-2 12:07 编辑

题目要求是这样的:
写一个Ticket类,有一个距离属性(本属性只读,在构造方法中赋值)
不能为负数,有一个价格属性,价格属性只读,并且根据距离计算价格(1元每公里)
0~~~100公里   票价不打折
101~200公里   总额大9.5折
201~300公里   总额打9折
300公里以上   总额打8折
有一个方法,可以显示这张票的信息

代码一开始调试总是错,后来把ShowInfo里面输出的值改成Distance和Price才行,之前用小写的distance和price都不行,用this指向也还是不行- -
  1. namespace 构造函数
  2. {
  3.     class Ticket
  4.     {
  5.         public Ticket(int diastance)
  6.         {
  7.             this.distance=diastance;
  8.         }
  9.         private int distance;
  10.         public int Distance
  11.         {
  12.             get {
  13.                 if (distance < 0)
  14.                     distance =0;
  15.                 return distance;
  16.             }
  17.         }
  18.         private double price;
  19.         public double Price
  20.         {
  21.             get
  22.             {
  23.                 if (distance < 100)
  24.                     price = distance;
  25.                 else if (distance >= 100 & distance < 200)
  26.                     price = distance * 0.95;
  27.                 else if (distance >= 200 && distance < 300)
  28.                     price = distance * 0.9;
  29.                 else
  30.                     price = distance * 0.85;
  31.                     return price;
  32.             }
  33.         }
  34.         public void ShowInfo()
  35.         {
  36.             Console.WriteLine("您的票的距离是{0}公里,价格是{1}",Distance,Price);//就是这句不懂。。。。
  37.         }
  38.     }
  39. }
复制代码
谁能详细解答下。。。ShowInfo里为什么只能用Distance和Price,distance输出也行,是因为Main函数调用时要先给distance赋值。但是price在get中不是也赋值了么?为什么不能输出呢??求解- -真心好纠结。。。


评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

3 个回复

倒序浏览
本帖最后由 林其荣 于 2013-2-1 22:56 编辑

楼主的意思是 ShowInfo方法里 用this.price的话 为0是吧?

直接this.price  楼主认为有调用到Price里的get块吗?

所以this.price里的值就是实例成员的初始值
回复 使用道具 举报
属性中的get和set在编译器中是封装好的两个方法,单纯的用this.price只是将字段中存储的值调用,并没有调用属性的get方法,因此需要用属性名触发get事件{:soso_e125:}

评分

参与人数 2技术分 +1 黑马币 +30 收起 理由
张文 + 1
岳珅 + 30 谢谢你,就你讲的最透彻- -懂了,谢谢.

查看全部评分

回复 使用道具 举报
用小写的不会报错,但是输出值价格是0。 因为你在属性里面进行了判断,属性里才给小写的字符返回值也就是赋值。 你这里直接调用小写的字段,也就是没有进行字段的判断,返回值肯定就是他的初始值0了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马