黑马程序员技术交流社区

标题: 构造函数中的问题。。。纠结好久了。。。求助 [打印本页]

作者: 岳珅    时间: 2013-2-1 20:25
标题: 构造函数中的问题。。。纠结好久了。。。求助
本帖最后由 岳珅 于 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中不是也赋值了么?为什么不能输出呢??求解- -真心好纠结。。。



作者: 林其荣    时间: 2013-2-1 22:42
本帖最后由 林其荣 于 2013-2-1 22:56 编辑

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

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

所以this.price里的值就是实例成员的初始值
作者: 贾宁    时间: 2013-2-1 22:51
属性中的get和set在编译器中是封装好的两个方法,单纯的用this.price只是将字段中存储的值调用,并没有调用属性的get方法,因此需要用属性名触发get事件{:soso_e125:}
作者: 刘明杰    时间: 2013-2-1 23:18
用小写的不会报错,但是输出值价格是0。 因为你在属性里面进行了判断,属性里才给小写的字符返回值也就是赋值。 你这里直接调用小写的字段,也就是没有进行字段的判断,返回值肯定就是他的初始值0了。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2