为了账号安全,请及时绑定邮箱和手机立即绑定

初学,属性和方法的问题。

初学,属性和方法的问题。

斯蒂芬大帝 2018-09-12 09:07:12
老师让定义了一个类,叫约瑟夫问题类。 属性有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推荐的做法。当然也要看你的算法复杂到什么程度,是否需要较长的运算时间,如果很复杂很耗时或者很长,还是写在单独的方法里吧。


查看完整回答
反对 回复 2018-09-16
?
四季花海

TA贡献1811条经验 获得超5个赞

Winners是个名词,还是属性好,要不改成GetWinners,不过没有参数的Get方法还是建议用只读属性

查看完整回答
反对 回复 2018-09-16
  • 2 回答
  • 0 关注
  • 498 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信