• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#静态类单例模式对比

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

公司的类都需要使用单例模式实现,这个可以节省资源,避免重复对象的生成。但是静态类也可以做到这一点,而且写起来更简洁,于是查阅相关资料,希望弄明白两者的差别。

1.单例模式可以在用到的时候初始化,而静态类会在程序开始运行时初始化?

通过自己的实践,我认为这个说法是不对的。我写了下面的例子进行实验。

    class Program
    {
        static void Main(string[] args)
        {

            Console.WriteLine(Class1.get(190));
            GC.Collect();
            Console.ReadKey();
        }
    }
    public static class Class1
    {
        public static int[] arr = new int[20480000];

        static Class1()
        {
            for (int i = 1; i < arr.Length; i++)
            {
                arr[i] = i;
            }
        }

        public static int get(int i)
        {
            return arr[i];
        }
    }

 

程序进入主函数时,内存是这样的

显然静态类中的arr没有被初始化,继续执行

  

可以看到这时静态类的arr被初始化了,而且arr值全部为0时,内存并没有变化,难道是微软做了优化?

2.GOF对单件的第一句场景解释就是“如果需要唯一实例”?

额,静态类难道不是唯一实例么?

3.单例模式,解耦?

 

public interface IHelloWorld
{
    string HelloWorld();
}
 
//然后是接口的两个实现.
public class HelloWorldEnglish : IHelloWorld
{
    string IHelloWorld.HelloWorld()
    {
        return "Hello World !";
    }
}
public class HelloWorldChinese : IHelloWorld
{
    string IHelloWorld.HelloWorld()
    {
        return "您好 世界 !";
    }
}

public class People
{
    private readonly IHelloWorld  peopleHelloWorld;
    public People(IHelloWorld helloWorld)
    {
        this.peopleHelloWorld = CreateSingle()
//这里你可以使用单例模式创建出来HelloWorldEnglish 或 HelloWorldChinese
    }
    public void SayHello()
    {
        Console.WriteLine(this.peopleHelloWorld.HelloWorld());
    }
}

这个代码我看完了愣是没明白解耦和单例啥关系,倒是明白了接口解耦挺好的(手动笑哭),下面大侠观点与我相同,但还是没有解开我的疑团

 

 4.单例可以有继承,实现接口,而静态类不能

这个观点我比较赞同,如果想使用单例,又想松耦合,就用单例模式吧。

静态类比较适合工具类。


参考链接:

https://bbs.csdn.net/topics/390487790

https://www.cnblogs.com/zhangzt/p/4350556.html

https://bbs.csdn.net/topics/390825682

https://www.xin3721.com/ArticlecSharp/c13696.html


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
虚拟机里C盘空间不够用MacriumReflect工具克隆发布时间:2022-07-14
下一篇:
C#编译执行过程发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap