using System;
**namespace** DesignPatters.Singleton
{
**public** **class** Singleton
{
**public** **static** Singleton Instance()
{
**if** (_instance == null)
{
**lock** ( **typeof** (Singleton))
{
**if** (_instance == null)
{
_instance = **new** Singleton();
}
}
}
**return** _instance;
}
**public** **int** NextValue()
{
**return** ++count;
}
**protected** Singleton(){}
**private** **static** **volatile** Singleton _instance = null;
**private** **int** count = 0;
}
**public** **class** MainClient
{
[STAThread]
**static** **void** Main()
{
Singleton sg1 = Singleton.Instance();
**for** ( **int** i = 0; i < 20; i++)
Console.WriteLine("Next Value: {0}",
sg1.NextValue() + " - sg1");
Singleton sg2 = Singleton.Instance();
Console.WriteLine("Next Value: {0}",
sg2.NextValue() + " - sg2");
}
}
}