懒惰实例化静态类的成员是否有益?

时间:2013-08-01 19:03:18

标签: vb.net static-members lazy-initialization static-classes

所以,我有一个班级成员,我或多或少地使用这些成员作为常数。我不能将它们分配为常量,因为它们比简单的原语更复杂。因此,这些“准常数”在我的应用中在不同的地方重复使用。不可否认,我将来可能会将这些文件移到配置文件中并动态加载它们。

然而,现在我很好奇 - 尽管这些是从静态类提供的,但是我可以用懒惰的实例化来包装它们吗?我问的原因是因为我没有使用每一个“准常数”,并且构造每一个都有一些开销(尽管很少)。我不希望通过这样做获得任何实际收益,因为它不是瓶颈或任何东西,但我对最佳实践感到好奇。我不太了解静态类的内部结构来自己回答这个问题。我知道访问静态成员不需要该类的实例 - 尽管在某些时候它必须构建这些成员。所以我的问题归结为:何时构造静态类的静态成员?如果它们是在使用之前构建的,那么我可以通过懒惰的实例化获益吗? (仅在请求时才实例化?)

1 个答案:

答案 0 :(得分:2)

  

何时构造静态类的静态成员?

静态构造函数和所有初始化都在创建该类的第一个实例或引用任何静态成员之前发生。

通常,静态构造函数和所有静态成员在第一次引用类之前就会被初始化,但从技术上讲,它可能在第一次使用之前的任何时候发生。

  

如果它们是在使用之前构建的,那么我可以通过懒惰的实例化获益吗? (仅在请求时才实例化它们?)

您可能会从中受益,特别是如果值需要大量初始化或大量内存使用,并且可能并不总是使用。 Lazy(Of T)类使得实现起来相当简单。