vb.net - 延迟实例化静态类的成员是否有益?

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

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

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

最佳答案

when are static members of a static class constructed?

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

通常,静态构造函数和所有静态成员都会在您第一次引用该类之前立即初始化,尽管从技术上讲,它可以在第一次使用之前的任何时候发生。

If they are constructed prior to use, then could I at all benefit by lazy instantiation? (instantiating them only when they are requested?)

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

关于vb.net - 延迟实例化静态类的成员是否有益?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18002419/

相关文章:

c# - 有没有办法像在 VB 中那样强制按值而不是 C# 中的 ref 传递参数?

c++ - 如何在类的头文件中定义一个 const double?

c++ - constexpr 使用静态函数初始化静态成员

java - Spring事务和 hibernate : lazy initialization

java - 使用单一检查习语的惰性初始化

java - Struts 2 Json 结果 Hibernate LazyInitialization - 如何在 hibernate session 中反序列化

c# - .cs 文件是否在 .vbproj 下编译?

javascript - 在 ASP.Net 中借助 VB 运行 javascript

c# - Visual Studio - 继承控件的新 "default"属性值

java - 静态内部类和类的静态成员共享同名?