C#几种单例模式
2021/10/6 9:11:14
本文主要是介绍C#几种单例模式,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
/** * 单例模式-懒汉式(一) */ public class Singleton { private static Singleton _instance; // 够造函数必须是私有的,不能被外部直接调用。 private Singleton() { } // 暴露给外部,提供实例。 public static Singleton getInstance() { if (_instance == null) { _instance = new Singleton(); } return _instance; } }
/** * 单例模式-懒汉式(二) */ public class Singleton { private static Singleton _instance; private static readonly object synchronized = new object(); // 够造函数必须是私有的,不能被外部直接调用。 private Singleton() { } // 暴露给外部,提供实例。 public static Singleton getInstance() { if (_instance == null) { lock (synchronized) //加锁防止多线程 { if (_instance == null) { _instance = new Singleton(); } } } return _instance; } }
/** * 单例模式-懒汉式(四) */ public class Singleton { // 够造函数必须是私有的,不能被外部直接调用。 private Singleton() { } // 暴露给外部,提供实例。 public static Singleton getInstance() { return SingletonHolder._instance; } // 静态内部内,实现延时加载 private static class SingletonHolder { public static Singleton _instance = new Singleton(); } }
/* *懒汉式加锁解决多线程安全问题 */ public class Singleton { private static Singleton _instance; private static readonly object syn = new object(); private Singleton() //构造函数设置private,不能被new,单例模式 { } public static Singleton CreateInstance() { if (_instance == null) { lock (syn) //加锁防止多线程 { if (_instance == null) { _instance = new Singleton(); } } } return _instance; } }
/* *使用.NET4的Lazy<T>类型 */ public sealed class Singleton { private static readonly Lazy<Singleton> lazy = new Lazy<Singleton>(() => new Singleton()); public static Singleton Instance { get { return lazy.Value; } } private Singleton() { } }
/* *完全延迟加载实现(fully lazy instantiation) */ public sealed class Singleton { private Singleton() { } public static Singleton Instance { get { return Nested.instance; } } private class Nested { // Explicit static constructor to tell C# compiler // not to mark type as beforefieldinit static Nested() { } internal static readonly Singleton instance = new Singleton(); } }
/* * 双重验证的线程安全实现 */ public sealed calss Singleton { private static Singleton instance = null; private static readonly object padlock = new object(); Singleton() { } public static Singleton Instance { get { if (instance == null) { lock (padlock) { if (instance == null) { instance = new Singleton(); } } } return instance; } } }
原文地址:https://www.cnblogs.com/Zhengxue/p/13141618.html
这篇关于C#几种单例模式的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-12-06使用Microsoft.Extensions.AI在.NET中生成嵌入向量
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#