装配创建指南

时间:2010-07-27 20:53:52

标签: .net architecture static assemblies frameworks

对于程序集中可以包含的静态函数的数量,是否有任何经验法则?

你如何识别一个函数是否需要是静态的v / s一个不需要是静态的函数?

3 个答案:

答案 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字段中必须提供线程单例行为的字段
  • 我的.NET配置类中的静态构造函数,如ConfigurationSectionConfigurationElement等。
    • 我已经开始将这种类型的配置类构造替换为简单地使用[ConfigurationProperty()]属性,这种属性更简单且通常更清晰,尽管它会产生非常少量的额外开销
  • 真正的全局,共享运行时数据......它比使用IoC和额外类型
  • 更简单

答案 2 :(得分:1)

我认为经验法则是尽可能使它静止。换句话说,如果方法需要访问实例字段,那么它不能是静态的。否则,它应该是。