可以 是静态的C#方法应该是静态的吗?
我们今天在讨论这个问题,我有点不知所措。想象一下,您有一个很长的方法需要重构几行。新方法可能会从父方法中获取一些局部变量并返回一个值。这意味着它 可能 是静态的。
问题是:它 应该 是静态的吗?从设计或选择上来看,它不是静态的,仅就其本质而言,因为它不引用任何实例值。
这取决于。静态方法实际上有两种:
在中小型代码库中,您实际上可以将两种方法互换使用。
如果您有一个属于第一类的方法(可以是静态的),并且需要将其更改为访问类状态,那么找出是否有可能将静态方法转换为实例方法是相对简单的。
但是,在庞大的代码库中,大量的调用站点可能会进行搜索,以查看是否有可能将静态方法转换为非静态方法过于昂贵。很多时候人们会看到呼叫数量,然后说:“好吧。我最好不要更改此方法,而是创建一个满足我需要的新方法”。
这可能会导致:
这两件事都是不好的。
因此,我的建议是,如果您的代码库超过200K LOC,则仅当方法必须是静态方法时,我才将它们设为静态。
从非静态到静态的重构相对容易(只需添加一个关键字),因此,如果您想稍后将可静态化为实际的静态(当您需要实例外部的功能时),则可以。但是,将可能静态的实例化方法进行逆向重构要昂贵得多。
对于大型代码库,最好是在易于扩展方面出错,而不是在思想上纯正方面出错。
因此,对于大型项目,除非需要它们,否则不要将其静态化。对于小型项目,请尽其所能。