一尘不染

*可以*是静态的C#方法应该是静态的吗?[关闭]

c#

可以 是静态的C#方法应该是静态的吗?

我们今天在讨论这个问题,我有点不知所措。想象一下,您有一个很长的方法需要重构几行。新方法可能会从父方法中获取一些局部变量并返回一个值。这意味着它 可能
是静态的。

问题是:它 应该 是静态的吗?从设计或选择上来看,它不是静态的,仅就其本质而言,因为它不引用任何实例值。


阅读 351

收藏
2020-05-19

共1个答案

一尘不染

这取决于。静态方法实际上有两种:

  1. 静态的方法,因为它们可以是
  2. 静态的方法,因为它们必须

在中小型代码库中,您实际上可以将两种方法互换使用。

如果您有一个属于第一类的方法(可以是静态的),并且需要将其更改为访问类状态,那么找出是否有可能将静态方法转换为实例方法是相对简单的。

但是,在庞大的代码库中,大量的调用站点可能会进行搜索,以查看是否有可能将静态方法转换为非静态方法过于昂贵。很多时候人们会看到呼叫数量,然后说:“好吧。我最好不要更改此方法,而是创建一个满足我需要的新方法”。

这可能会导致:

  1. 很多代码重复
  2. 方法参数数量激增

这两件事都是不好的。

因此,我的建议是,如果您的代码库超过200K LOC,则仅当方法必须是静态方法时,我才将它们设为静态。

从非静态到静态的重构相对容易(只需添加一个关键字),因此,如果您想稍后将可静态化为实际的静态(当您需要实例外部的功能时),则可以。但是,将可能静态的实例化方法进行逆向重构要昂贵得多。

对于大型代码库,最好是在易于扩展方面出错,而不是在思想上纯正方面出错。

因此,对于大型项目,除非需要它们,否则不要将其静态化。对于小型项目,请尽其所能。

2020-05-19