分享

c#单例模式代码

 zop个人图书馆 2012-11-16

学习过的东西经常忘记,最好能自己在事后回顾一下,并写出具体的实现代码,这样才能加深记忆。
最近学习过单例模式,包括惰性加载方式、非惰性加载方式以及泛型方式实现。下面回顾一下代码。

1、非惰性加载、非泛型方式

Code:
  1. /// <summary>
  2. /// 单例模式的非惰性、非泛型实现方式
  3. /// </summary>
  4. public class Singleton
  5. {
  6. static readonly Singleton instance = new Singleton();//默认为private,不需要显式声明为private
  7. static Singleton()//加入静态构造函数,是为了控制类的初始化时机
  8. {
  9. }
  10. public static Singleton Instance
  11. {
  12. get
  13. {
  14. return instance;
  15. }
  16. }
  17. }

2、惰性加载、非泛型方式:避免了线程安全问题

Code:
  1. /// <summary>
  2. /// 单例模式的惰性、非泛型实现方式
  3. /// </summary>
  4. public class Singleton
  5. {
  6. static Singleton()//加入静态构造函数,是为了控制类的初始化时机
  7. {
  8. }
  9. public static Singleton Instance
  10. {
  11. get
  12. {
  13. return SingletonInnerClass.singleton;
  14. }
  15. }
  16. /// <summary>
  17. /// 单例内私有类
  18. /// </summary>
  19. class SingletonInnerClass
  20. {
  21. static SingletonInnerClass() { }
  22. public static Singleton singleton = new Singleton();
  23. }
  24. }

3、非惰性加载、泛型方式

Code:
  1. /// <summary>
  2. /// 单例模式的非惰性、泛型实现方式
  3. /// </summary>
  4. public class Singleton<T> where T:new()
  5. {
  6. static readonly T instance = new T();//默认为private,不需要显式声明为private
  7. static Singleton()//加入静态构造函数,是为了控制类的初始化时机
  8. {
  9. }
  10. public T Instance
  11. {
  12. get
  13. {
  14. return instance;
  15. }
  16. }
  17. }

4、惰性加载、泛型实现方式

Code:
  1. /// <summary>
  2. /// 单例模式的惰性、泛型实现方式
  3. /// </summary>
  4. public class Singleton<T> where T:new()
  5. {
  6. static Singleton()//加入静态构造函数,是为了控制类的初始化时机
  7. {
  8. }
  9. public static T Instance
  10. {
  11. get
  12. {
  13. return SingletonInnerClass.singleton;
  14. }
  15. }
  16. /// <summary>
  17. /// 单例内私有类
  18. /// </summary>
  19. class SingletonInnerClass
  20. {
  21. static SingletonInnerClass() { }
  22. internal static T singleton = new T();//此处请不要使用public访问修饰符
  23. }
  24. }
  25. 各个版本的实现都有自己的优势,大家可以根据自己的需要自行选择,关于非泛型版本之间效率和安全的比较,大家可参考:http://rhx520.blog.163.com/blog/static/2998792020081122102444743/
      

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多