Get方法的大小

时间:2013-11-25 14:23:15

标签: c# properties access-modifiers members

对于代码行方面的“获取”的大小,是否有任何指导方针或一般共识?我在一个成员上有一个Get方法,这里很容易增长到30行代码。我不确定在什么时候这应该被引入一个方法。但是后来我只会调用类似GetMyString的东西,并将值分配给另一个成员并在构造函数中调用它。

是否值得这样做?

这对SO来说太主观了吗?

5 个答案:

答案 0 :(得分:15)

dcastro的答案很好但可以使用一些扩展:

  • 不需要很长时间才能返回

这不是量化的;让我们量化一下。一个属性不应该超过获取字段所需时间的十倍。

  • 它没有连接到外部资源(数据库,服务等)

这些都很慢,因此通常属于第一条规则,但第二个方面是:失败应该是罕见的或不可能的。属性getter不应该抛出异常。

  • 它没有任何副作用

我会澄清可观察的副作用。属性获取者通常会产生副作用,即他们计算属性一次并将其缓存以供日后使用,但这不是可观察到的副作用。

对于使属性具有可观察的副作用而言,不仅在哲学上是不好的,它还会破坏您的调试体验。请记住,默认情况下,当您在调试器中查看对象时,调试器会自动调用其属性getter并显示结果。如果这样做很慢,那么会减慢调试速度。如果这样做可能会失败,那么您的调试体验将充满失败消息。如果这样做有副作用,那么调试程序会改变程序的工作方式,这可能会使查找错误变得非常困难。您当然可以关闭自动属性评估,但最好先设计好的属性。

答案 1 :(得分:12)

重要的不是大小(没有双关语意)。 只要

,就可以将你的逻辑放在吸气剂中
  • 不需要很长时间才能返回
  • 它没有连接到外部资源(数据库,服务等)
  • 它没有任何副作用

这些只是适当使用财产的一些指导原则。

修改

上述指南共享一个理想:属性访问器应该像数据访问一样,因为这是用户期望的。

Bill Wagner撰写的有效C#一书:

  

属性是可以从调用代码中查看的方法   数据。这给用户带来了一些期望。他们会的   看到属性访问,就好像它是一个数据访问。毕竟,   这就是它的样子。您的财产访问者应该不辜负   那些期望。获取访问者不应该有可观察的一面   效果。设置访问器会修改状态,用户应该能够   看到那些变化。

     

属性访问器也具有性能   对用户的期望。属性访问看起来像数据字段   访问。它不应该具有性能特征   与简单的数据访问明显不同。

     

属性访问者   不应该执行冗长的计算,或进行交叉应用   调用(例如执行数据库查询),或做其他冗长的事情   与用户期望不一致的操作   对于属性访问者。

Alberto的奖金:http://msdn.microsoft.com/en-us/library/vstudio/ms229054%28v=vs.100%29.aspx

答案 2 :(得分:3)

这不一定是坏事,但如果是我,那会让我感到紧张,我会试着以某种方式试图分解它。吸气剂是一种方法,所以简单地将整个物体拉成30+线方法在我看来是浪费时间。我会试图把它砍掉。例如。如果它是带有一些检查的循环,则将检查作为方法或某些方法提取。

答案 3 :(得分:2)

将一大堆行推入Get方法是一种常见的不良做法。 我在visual studio中安装了一些名为CodeMaid的东西。它有一个名为CodeMaid Spade的东西,它为每种方法评分并给你一个分数。分数越高,方法越差。它也可以用在属性上。我建议你尝试一下,它有助于格式化,缩进和一堆其他好的做法

答案 4 :(得分:1)

作为一般准则,方法不应该在一个屏幕上有更多的线条。如果你必须滚动,它太大了。将其分成更小的方法。