老师让定义了一个类,叫约瑟夫问题类。 属性有Number,Times,Survive,Kids,Winners. 当时我把Winners定义成一个字段winners。然后用方法处理后返回winners。 老师说可以直接在属性里处理winners。我始终觉得,具体算法应该在方法里面实现。当然属性里可以做。 对此有很大疑问,抛开属性效率高的观点。具体算法是应该在方法里么?
2 回答
白衣染霜花
TA贡献1796条经验 获得超10个赞
C#中的属性是个语法糖,它本身就是方法(get方法和set方法)。
面向对象中的属性表示对象包含的数据或状态,是名词,C#属性的表现形式与它在语义上更一致一些。如果像Java那样,对于数据或状态的暴露采用get和set方法,在语义上就变成了动词,是获取(或设置)xxx属性的值,跟面向对象的属性就不是很一致,显得很别扭(权且这么说吧)。比如,你想获取一个Person的Age,C#直接用Person.Age就可以了,也就是直接得到年龄,但Java中要Person.getAge(),字面上是通过“获取年龄”才能得到年龄的值,这显然很别扭吧。
在C#的属性中添加算法是没有问题的,很多验证算法都在set里,很多判断是否为空的逻辑也都在get里,这是.NET推荐的做法。当然也要看你的算法复杂到什么程度,是否需要较长的运算时间,如果很复杂很耗时或者很长,还是写在单独的方法里吧。
- 2 回答
- 0 关注
- 498 浏览
添加回答
举报
0/150
提交
取消