对于程序集中可以包含的静态函数的数量,是否有任何经验法则?
你如何识别一个函数是否需要是静态的v / s一个不需要是静态的函数?
答案 0 :(得分:3)
嗯,没有经验法则 - 归结为设计论证。如果您要收听FxCop,如果某个方法对该类的实例成员不起作用,则该方法可以是静态的...
我更喜欢采用古老的定义,如果该类型在类型中共享而不是特定于该类型的实例,则该方法应该是静态的。
此链接包含“何时使用”部分:
http://msdn.microsoft.com/en-us/library/79b3xss3(VS.80).aspx
答案 1 :(得分:1)
一般来说,随着DI和IoC容器的出现提供了对组件的生活方式控制,我尝试将static
的使用保持在最低限度。使用由IoC容器管理的“singleton”组件,静态类和/或函数的值和使用会逐渐消失。
也就是说,组件中可以有多少静态类型或成员没有限制。一个类型的静态成员被CLR存储在称为加载器堆的东西上,而不是普通的GC堆,并且这些堆开始相当小(我相信大约32k)。鉴于此,它可能需要数千个静态类和/或填充加载器堆的方法。
以下是我仍然使用静态成员或类的一些方法:
[ThreadStatic] static
字段中必须提供线程单例行为的字段ConfigurationSection
,ConfigurationElement
等。
[ConfigurationProperty()]
属性,这种属性更简单且通常更清晰,尽管它会产生非常少量的额外开销答案 2 :(得分:1)
我认为经验法则是尽可能使它静止。换句话说,如果方法需要访问实例字段,那么它不能是静态的。否则,它应该是。