Get方法的大小

10 c# properties access-modifiers members

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

有没有值得这样做?

这对SO来说太主观了吗?

Eri*_*ert 15

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

  • 回来不需要很长时间

这没有量化; 让我们量化一下.一个属性不应该超过获取字段所需的十倍.

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

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

  • 它没有任何副作用

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

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


dca*_*tro 12

它的重要性并不重要(没有双关语意).只要你的逻辑在吸气器中就可以了

  • 回来不需要很长时间
  • 它没有连接到外部资源(数据库,服务等)
  • 它没有任何副作用

这些只是适当使用财产的一些准则.

编辑

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

来自Bill Wagner的Effective C#一书:

属性是可以从调用代码(如数据)查看的方法.这给用户带来了一些期望.他们将看到属性访问,就像它是数据访问一样.毕竟,这就是它的样子.您的财产访问者应该达到这些期望.获取访问者不应该有可观察到的副作用.设置访问者会修改状态,用户应该能够看到这些更改.

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

属性访问器不应执行冗长的计算,或进行跨应用程序调用(例如执行数据库查询),或执行与用户对属性访问器的期望不一致的其他冗长操作.

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

  • 我想添加一个简单的规则:当你想明确声明它做的不仅仅是"返回值"时,使用`GetMethod` (2认同)