c# 不同单例的不同意义

前言

在c#,可能有很多五花八门的单例给你选择,分什么懒汉模式等等什么模式,其实不同的写法对程序是有一定影响的。

正文

为什么需要单例呢?其实我们自己是可以控制单例的,只是单例模式给了我们一个好的设计。

我想没有会下面这样写:

void main()
{
  var obj=new good();
  obj.show();
  var obj=new good();
  obj.show();
}

但是有可能下面这样写:

public class a
{
   public void showa()
   {
     var obj=new good();
     obj.show();
   }
}

public class b
{
   public void showb()
   {
     var obj=new good();
     obj.show();
   }
}

void main()
{
  var a=new a();
  a.showa();
  var b=new b();
  b.showb();
}

这时候可能就浪费资源了,单例模式给了我们一个好的设计。

有下面几种方式:

方式一
public class good{
    private good(){
        do some thing
    }
    private good __good;
    private static object lockobj=new object();
    public good createinstance()
    {
        if(__good==null)
        {
            lock(lockobj)
            {
                if(__good==null)
                  {
                    __good=new good();
                  }
            }
        }
    }
}

方式二

public class good{
    private good(){
        do some thing
    }
    private static good __good=new good();
    public good createinstance()
    {
        return  __good;
    }
}

方式三

public class good{
    private good(){
        do some thing
    }
    private good __good;
    private static good()
    {
        __good=new good();
    }

    public good createinstance()
    {
        return  __good;
    }
}

不同之处

第一种是普通模式。

用完了资源就会被cg释放。

第二种和第三种会一直存在内存中,由clr控制。

原文地址:https://www.cnblogs.com/aoximin/p/13121884.html