???????????????????????????????????????????????????????????Singleton???????????????????????GetInstance??????????????????ж?(uniqueInstance ==null)???????????????棬???????????????Singleton???????????Υ???????????????????????????????????ж???????У???????????????????????????GetInstance?????????????????????????к??????????????????????????????????????????????:
/// <summary>
/// ???????????
/// </summary>
public class Singleton
{
// ??????????????????????????
private static Singleton uniqueInstance;
// ???????????????????
private static readonly object locker = new object();
// ??????й??????????粻????????????
private Singleton()
{
}
/// <summary>
/// ???幫?з??????????????????????????幫?????????????????
/// </summary>
/// <returns></returns>
public static Singleton GetInstance()
{
// ?????????????е??????????????locker???? "????"??
// ?????????????и÷????????????locker?????"????"??????????????????????????
// lock?????????????????????????????????"????"
lock (locker)
{
// ???????????????????????????????
if (uniqueInstance == null)
{
uniqueInstance = new Singleton();
}
}
return uniqueInstance;
}
}
??????????????????????????????????????????????????????????????????????locker??????????ж???????????????????????????б???????????????????????????????????????????????????ж??uniqueInstance==null??????????????????????????????????????ж???????????????????????????????????????????????????????????????????????lock??????????uniqueInstance==null?????ж??????????????????????????????????????? “???????”????????忴??????????
/// <summary>
/// ???????????
/// </summary>
public class Singleton
{
// ??????????????????????????
private static Singleton uniqueInstance;
// ???????????????????
private static readonly object locker = new object();
// ??????й??????????粻????????????
private Singleton()
{
}
/// <summary>
/// ???幫?з??????????????????????????幫?????????????????
/// </summary>
/// <returns></returns>
public static Singleton GetInstance()
{
// ?????????????е??????????????locker???? "????"??
// ?????????????и÷????????????locker?????"????"??????????????????????????
// lock?????????????????????????????????"????"
// ???????????????ж??????
if (uniqueInstance == null)
{
lock (locker)
{
// ???????????????????????????????
if (uniqueInstance == null)
{
uniqueInstance = new Singleton();
}
}
}
return uniqueInstance;
}
}
?????塢C#????????????????
?????????????????????????????????.NET FrameWork?????????е?????????????
????????????.NET?????????????????????????????????????????????忴??????????????(????????????System.dll??????????????System?????????÷??乤??Reflector???????):
// ???????????????
// ?????????????????????
internal sealed class SR
{
private static SR loader;
internal SR()
{
}
// ????????????????У????????????????????????е???
// ?????????????????????????
private static SR GetLoader()
{
if (loader == null)
{
SR sr = new SR();
Interlocked.CompareExchange<SR>(ref loader?? sr?? null);
}
return loader;
}
// ??????з????е?????GetLoader??????
public static object GetObject(string name)
{
SR loader = GetLoader();
if (loader == null)
{
return null;
}
return loader.resources.GetObject(name?? Culture);
}
}
???????????
??????????????????????????????????????????′?????????????????????????????????????????????????????????????????????????????????