一辆汽车,要获取它行使中的速度,应该理解为:A,速度为汽车的属性,所以获取的是汽车的一个属性.
Car model = new Car();
return model.Speed;B,速度是不断变化的,所以不能理解为属性,只能通过方法来获取.
Car model = new Car();
return model.speed();哪个才是最好的答案?或另有想法?
请大家积极发言.
Car model = new Car();
return model.Speed;B,速度是不断变化的,所以不能理解为属性,只能通过方法来获取.
Car model = new Car();
return model.speed();哪个才是最好的答案?或另有想法?
请大家积极发言.
调用属性实际上是调用 get 或 set 方法。
就像 DataGridView 中的 CurrentCell(属性哦) 一样,这个值是不断变化的,是根据你的行列变化而得来的。
汽车也一样: Car 中应该有 CurrentSpeed,这个值是不断变化的,是根据你的状态和时间而改变的。
======================================
状态:停止,启动,加速,减速 等等。
时间:结合状态,线性的 -------->个人分析,大家讨论一下吧。
理由如下:
1)任何一个汽车网站或论坛上,关于汽车的介绍里,都没有当前速度这个概念。有的只是最高速度。
2)属性,我当然认为他是GET SET,但出题人蛋疼的认为属性就是右边“属性”栏里显示的那部分,至于你类里写的属性,那不叫属性。
3)参考9楼的回答:如果随便搞一个有关的东西就叫做属性,那么驾驶员算不算属性?售价算不算属性?出入证算不算属性?车库算不算属性?洗车价钱算不算属性?载货的价值算不算属性?
4)10楼的说法,我不知道理解的对不对,你的意思是该方法要传参吗?传进去参照物的速度,方向,档位,发动机转速?如果是的话,那你可能高估那个蛋疼的出题人了。估计他平时喜欢,先给全局变量赋值,再调用无参数的方法这样的编程方式。另:LZ说自己做错了,我们更期待你告诉我们:你是如何回答的?谁说你错了?那个说你错了的人告诉你错在哪?那个人对这个问题是如何理解的?
{
get{Car model = new Car();
return model.speed();}
set;
}
这题本身也没有确定答案,什么设计都不是死的,项目要求怎么样合理,就怎么样,OOP? 那是工具,是你用它,吧是它用你。
汽车的颜色,汽车的大小,汽车的速度,汽车的型号,等等这些都应该是属性。如果说是行驶中的速度,那就是应该是
B,速度是不断变化的,所以不能理解为属性,只能通过方法来获取.
Car model = new Car();
return model.speed();其实也有点类似与timer控件吧。
从这个方面来看,速度只是一个状态,而这个状态不是相对于汽车的,而是汽车相对于周围环境的。
再假使,汽车有油料,打着火,挂着档,轮子在转。你敢说汽车本身是有速度的吗?
所以,轮子转本来就只是一种状态了。也就是说,由于轮子转动而出现的相对移动,只能算是一种状态,而且这种状态是不定的,那么这里就不用属性来取到了。
如果放在属性里,在速度频繁变化的情况下,内存耗费大,cpu耗费次数频繁(因为你要不断的改写这个属性的值,而且伴有存取)。
而获得状态的途径一般是 事件,也就是说想要知道这个状态,就要实行监测(监控),所以这个事件的触发源一般是监测设备。我们平时存储线性事件内的状态变化时,也只是存储变化节点的时间和变化后的状态值,统计数据也是根据节点计算的。当然不是说属性不能用,只是属性用在这里一个是定义偏离另一个是不太规范而已。
从这个方面来看,速度只是一个状态,而这个状态不是相对于汽车的,而是汽车相对于周围环境的。
再假使,汽车有油料,打着火,挂着档,轮子在转(轮子是悬空的)。你敢说汽车本身是有速度的吗?
所以,轮子转本来就只是一种状态了。也就是说,由于轮子转动而出现的相对移动,只能算是一种状态,而且这种状态是不定的,那么这里就不用属性来取到了。
如果放在属性里,在速度频繁变化的情况下,内存耗费大,cpu耗费次数频繁(因为你要不断的改写这个属性的值,而且伴有存取)。
而获得状态的途径一般是 事件,也就是说想要知道这个状态,就要实行监测(监控),所以这个事件的触发源一般是监测设备。我们平时存储线性时间内的状态变化时,也只是存储变化节点的时间和变化后的状态值,统计数据也是根据节点计算的。当然不是说属性不能用,只是属性用在这里一个是定义偏离另一个是不太规范而已。
客观上理解,2是对的。但2理解的不完整。
因为是速度,不是当前速度
所以定义为speed(Time t=CurrentTime)才是合理的speed不能作为属性。currentSpeed才有作为属性的理由。
其实意义上来说.NET的属性就是一种写法上的优化,和方法没有本质的区别,但是.NET提出这样一种概念,就表示他是一种.NET推荐的规范,个人习惯用属性把各种“属性”体现出来,不喜欢JAVA的方法式set和get,不够美观,仅此而已,就这么多。
用过的NET的库函数就能感受到大部分该是属性的东西都已经变成属性了,基本上没有用方法得到的属性,这就是.NET的编程规范,工作中碰到许多有2 3年经验的.NET程序员(以前搞JAVA和C的)仍然不习惯用属性这种东西,我也没有办法,这是别人的习惯,你能拿他怎么办呢,公司又没有哪个资深并且专制的.NET高手来统一武林,大家都只想把功能实现就可以了。
老实说如果真的有公司这么在意封装的效果和使用体验,那这肯定是个比较不错的公司了,一般的公司都是要你实现功能,管你是改底层还是修改页面,还是怎么地,这种公司太多了。
类的方法和属性并不等同于面向对象编程中的属性和行为。至于,上面有人提出的驾驶员算不算属性,这完全要看你的对象内涵,并不能作为速度是不是属性这类问题的举证。