在c#中创建单例的方法有哪些

  介绍

这期内容当中小编将会给大家带来有关在c#中创建单例的方法有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

第一种常见的方式创建单例:,

///, & lt; summary>   ,///不安全的单例   ,///& lt;/summary>   ,public  sealed  class 单例   ,{   private 才能static  Singleton  _Singleton;   private 才能;单例(),{,}   public 才能static  Singleton  GetSingleton ()   {才能   ,,if  (_Singleton ==, null)   ,,{   ,,,_Singleton =, new 单例();   ,,}   ,,return  _Singleton;   ,,}   以前,}

注:为什么说是不安全的单例,多线程访问时可能会新多个对象……

第二种方式创建单例:

///, & lt; summary>   ,///(多线程)安全单例   ,///& lt;/summary>   ,public  sealed  class 单例   ,{   private 才能static  Singleton  _Singleton;   private 才能static  readonly  object  obj =, new 对象();   private 才能;单例(),{,}   public 才能static  Singleton  GetSingleton ()   {才能   ,,if  (_Singleton ==, null)   ,,{   ,,,//加锁保护,在多线程下可以确保实例值被创建一次。缺点是每,次获取单例,都要进行判断,涉及到的锁和解锁比较耗资源。   ,,,lock  (obj)   ,,,{   ,,,,if  (_Singleton ==, null)   ,,,,{   ,,,,,_Singleton =, new 单例();   ,,,,}   ,,,}      ,,}   ,,return  _Singleton;   ,,}   以前,}

注:为了解决上面第一种方式创建的不安全实例问题应用而生。

第三种方式创建单例:

///, & lt; summary>   ,///只读单例   ,///& lt;/summary>   ,public  sealed  class 单例   ,{   private 才能static  readonly  Singleton  instance =, new 单例();   private 才能;单例(),{,}   public 才能;static  Singleton 实例   {才能   ,才能得到的   ,,{   ,,,return 实例;   ,,}   ,,}   以前,}
///, & lt; summary>
  ,///基于上面的只读单例=自动属性只读单例(语法糖)
  ,///& lt;/summary>
  ,public  sealed  class 单例
  ,{
  private 才能;单例(),{,}
  public 才能static  Singleton  Instance {,得到;},=,new 单例();
  以前,} 

注:只读属性式=祝辞借助只读的属性,实例只被初始化一次,同样达到了单例的效果。在引用函数执行第一句话之前,例如其实已经被赋值了,并不是预期的只有到访问实例变量时才创建对象。

第四种方式创建单例:

///, & lt; summary>   ,///单例中加上静态构造函数。   ,///& lt;/summary>   ,public  sealed  class 单例   ,{   public 才能static  readonly  Singleton  instance =, new 单例();   private 才能;单例()   {才能   ,,Console.WriteLine(“初始化1 !“);   ,,}   static 才能;单例()   {才能   ,,}   public 才能;static  Singleton 实例   {才能   ,,get  {, return 实例,}   ,,}   以前,}

注:为了解决(第三种只读属性实例)在执行第一句代码之前,实例已经被初始化问题。

第五种方式创建单例:

///, & lt; summary>   ,///使用懒惰创建单例,默认是线程安全的   ,///& lt;/summary>   ,public  sealed  class 单例   ,{   private 才能static  readonly  Lazy, instance =, new  Lazy((),=祝辞,new 单例());//private 才能;单例(),{,}   public 才能;static  Singleton 实例   {才能   ,才能得到的   ,,{   ,,,return  instance.Value;   ,,}   ,,}   以前,}
//,贴一下关于上面Lazy, s=new  Lazy()参数的定义;//,才能摘要://才能,初始化System.Lazy“1类的新实例只懒惰初始化时//,,,发生时,使用指定的初始化函数和初始化模式。
  ,,//才能,参数://才能,valueFactory://,才能被调用以生成延迟初始化值的委托是必需的参数
  ,////才能,isThreadSafe://,才能,如果要使此实例可由多个线程同时使用,则为真,假的
  ,,,,,,,,//使此实例一次只能由一个线程使用。
  public 才能;懒惰(Func

在c#中创建单例的方法有哪些