1、没有考虑线程安全
public class Singleton { private static Singleton _instance = null; private Singleton(){} public static Singleton CreateInstance() { if(_instance == null) { _instance = new Singleton(); } return _instance; } }
2、考虑了线程安全,不过有点烦,但绝对是正规写法,经典
public class Singleton { private volatile static Singleton _instance = null; private static readonly object lockHelper = new object(); private Singleton(){} public static Singleton CreateInstance() { if(_instance == null) { lock(lockHelper) { if(_instance == null) _instance = new Singleton(); } } return _instance; } }
public class Singleton { private Singleton(){} public static readonly Singleton instance = new Singleton(); }
(二)一道面试题
public class A { public int x = 1; public A() { PrintFields(); Console.WriteLine("x={0}",x); } public virtual void PrintFields() { } } public class B:A { int y; public B() { y = -1; } public override void PrintFields() { Console.WriteLine("x={0},y={1}",x,y); } } B b=new B()