C# Get方法的大小

C# Get方法的大小,c#,properties,access-modifiers,members,C#,Properties,Access Modifiers,Members,就代码行而言,对于“Get”的大小是否有任何指导原则或普遍共识?我在一个成员上有一个Get方法,它可以很容易地扩展到30行代码。我不确定在什么情况下应该将其引入到方法中。但是我只会调用它,比如GetMyString,并将值赋给另一个成员,然后在构造函数中调用它 这样做值得吗 这太主观了吗?在Get方法中塞进一大堆行是一种常见的错误做法。 我在VisualStudio中安装了一个叫做CodeMaid的东西。它有一种叫做CodeMaid Spade的东西,它对每种方法进行评分并给你打分。分数越高,你

就代码行而言,对于“Get”的大小是否有任何指导原则或普遍共识?我在一个成员上有一个Get方法,它可以很容易地扩展到30行代码。我不确定在什么情况下应该将其引入到方法中。但是我只会调用它,比如GetMyString,并将值赋给另一个成员,然后在构造函数中调用它

这样做值得吗


这太主观了吗?

在Get方法中塞进一大堆行是一种常见的错误做法。
我在VisualStudio中安装了一个叫做CodeMaid的东西。它有一种叫做CodeMaid Spade的东西,它对每种方法进行评分并给你打分。分数越高,你的方法就越差。它也可以用于属性。我建议您尝试一下,它有助于格式化、缩进和一系列其他良好实践

实际上大小并不重要(没有双关语)。 你的逻辑在一个getter中是可以的,只要

  • 没多久就回来了
  • 它不连接到外部资源(数据库、服务等)
  • 它没有任何副作用
这些只是正确使用房产的一些指南

编辑

上述准则有一个共同的理想:属性访问器的行为应该类似于数据访问,因为这是用户所期望的

从比尔·瓦格纳的《有效C#》一书中:

属性是可以从调用代码查看的方法,如 数据。这会让用户产生一些期望。他们将 将属性访问视为数据访问。毕竟,, 这就是它看起来的样子。您的属性访问器应该符合 这些期望。Get访问器不应该有可观察的一面 影响。Set访问器不修改状态,用户应该能够 看到这些变化

属性访问器也具有性能 对用户的期望。属性访问看起来像一个数据字段 通道它不应具有以下性能特征: 明显不同于简单的数据访问

属性访问器 不应执行冗长的计算或交叉应用 调用(如执行数据库查询)或执行其他冗长的操作 与用户期望不一致的操作 对于属性访问器


Alberto的奖励:

作为一般准则,一个方法的行数不应超过一个屏幕上的行数。如果你必须滚动,它太大了。把它分成更小的方法。

不一定不好,但如果是我,它会让我紧张,我会想办法把它打破。getter是一种方法,因此在我看来,简单地将整个过程拉到一个30+行的方法中是浪费时间的。我想把它切碎。例如,如果是包含一些检查的循环,则将检查提取为方法或类似方法。

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

  • 没多久就回来了
这不是量化的;让我们量化一下。一个属性所需的时间不应该超过(比如)获取字段所需时间的十倍

  • 它不连接到外部资源(数据库、服务等)
这些都是缓慢的,因此通常属于第一条规则,但这还有第二个方面:失败应该是罕见的或不可能的。属性获取程序不应抛出异常

  • 它没有任何副作用
我想澄清这一点,以观察到副作用。属性获取者通常有一个副作用,即他们只计算一次属性,然后缓存它以备以后使用,但这不是一个可观察的副作用


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

我不知道属性的具体指南,但许多最佳编码实践在一种方法中使用7-10行作为首选行数。getter在做什么?好问题。getter用于包含类似于以下文章的功能的类中:您会注意到其中有许多stings(例如baseString),可以从类上的其他成员(例如所有OAuth标记)构造这些stings。在相关的注释中,方法的动词选择通常是关于其复杂性的一个很好的提示。看,这正是我要写的。如果你问我,“副作用”部分是最重要的。任意的线限制就是这样-任意的。我们应该尽可能地小,但是仅仅因为一个任意的限制而将方法拆分会妨碍可读性。我想补充一篇关于在属性和方法之间进行选择的好文章:我想补充一条简单的规则:当你想明确声明它做的事情不仅仅是“返回值”我认为方法应该尽可能小,不能更小。仅仅因为一些任意的限制(一个屏幕-什么分辨率?)-会妨碍可读性。常识高于任意限制。谁的屏幕?:)有时有一个长的方法是好的。只有逻辑才能决定方法的大小。感谢Eric的提醒!我不太喜欢量化;我认为“它不应该比常规数据访问花费太多时间”是一个很好的处方。