如果你有一个Point3类并且有一个方法被调用Distance,你应该像这样静态:
Point3.Distance ( p1, p2 );
Run Code Online (Sandbox Code Playgroud)
或者类似的实例方法:
this.Distance ( p );
Run Code Online (Sandbox Code Playgroud)
我意识到使用静态方法阻碍了继承和覆盖,对吧?
哪一个更好,为什么?
我更喜欢静态版本.(这就是我们在SlimDX中全面完成的工作,除了一些"特殊"操作.)理由是,距离在概念上是一个处理两个点并具有结果的函数.您没有在p1上运行"距离"操作,p2作为值.
简而言之,我更喜欢实例方法在概念上是绑定到特定实例的操作.对于一些人来说,无论哪种方式.例如,SlimDX包括Vector3 Normalize函数的静态和非静态版本,因为这两种结构都非常方便.实例1修改其对象,静态实例返回新对象.
[编辑]另一个答案提到了一个"DistanceTo"函数,它将是一个实例函数.虽然这不一定是不合理的,但这是一个让我感到不安的设计方向.问题是正交性.一旦你添加了更多的这些重载 - 一些静态的,一些实例,也许是MathHelper类中的一些,谁知道 - 你最终会有越来越多的方法来做同样的事情.这对于图书馆的复杂性,测试复杂性,bug表面区域等都是个坏消息.我们选择在SlimDX中的地方做这个,但是在很多课程中只有少数几个地方(并且每个人都经过团队审查) ).它可以在一定程度上帮助库的可用性,但是最终在错误的一行结束是非常危险的.
| 归档时间: |
|
| 查看次数: |
493 次 |
| 最近记录: |