gpt4 book ai didi

c# - C# 中的静态类 "Initialize"模式?

转载 作者:太空狗 更新时间:2023-10-29 20:34:44 26 4
gpt4 key购买 nike

使用此模式的好处或原因是什么?..

public sealed class myStaticClass
{
private static bool _initialized;
private static object _lockObject;

private static string _someStaticField;
private static int _anotherStaticField;
private static string _nthStaticField;

static myStaticClass()
{
_initialized = false;
_lockObject = new object();
}

public myStaticClass()
{
}

public static void Initialize()
{
if(!_initialized)
{
lock(_lockObject)
{
if(!_initialized)
{
//do initializing
_someStaticField = someApplicationSetting;
_anotherStaticField = anotherApplicationSetting;
_nthStaticField = nthApplicationSetting;

_initialized = true;
}
}
}
}

public static string NthStaticField
{
get {

Initialize();
return _nthOtherField;
}
}
}

如果保证在访问任何类成员之前调用静态构造函数,并且它只被调用一次,那么为什么不将所有初始化逻辑放在静态构造函数中呢?

编辑: 我更新了模式以更好地反射(reflect)我发现它的 .net 框架中的类。我已将类上的 static 修饰符更改为 sealed 并且我还添加了一个空的 public 构造函数。

附言。如果您想知道,我在其中看到此模式的类是 FormsAuthentication 类。

最佳答案

这样做的唯一原因是如果初始化很昂贵(就 CPU/RAM 而言),或者需要的东西只能在运行时 IMO 的稍后时间使用...此实现将初始化延迟到最近的可能时刻(就在第一次访问之前) ).它是什么样的 Lazy<T> 提供...

关于c# - C# 中的静态类 "Initialize"模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9745163/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com