Understanding Singleton Design Pattern in C#