C# 静态类 单例模式 对比
2021-02-03 12:15
标签:style 生成 nbsp 接口 inf logs code zhang art 公司的类都需要使用单例模式实现,这个可以节省资源,避免重复对象的生成。但是静态类也可以做到这一点,而且写起来更简洁,于是查阅相关资料,希望弄明白两者的差别。 1.单例模式可以在用到的时候初始化,而静态类会在程序开始运行时初始化? 通过自己的实践,我认为这个说法是不对的。我写了下面的例子进行实验。 程序进入主函数时,内存是这样的 显然静态类中的arr没有被初始化,继续执行 可以看到这时静态类的arr被初始化了,而且arr值全部为0时,内存并没有变化,难道是微软做了优化? 2.GOF对单件的第一句场景解释就是“如果需要唯一实例”? 额,静态类难道不是唯一实例么? 3.单例模式,解耦? 这个代码我看完了愣是没明白解耦和单例啥关系,倒是明白了接口解耦挺好的(手动笑哭),下面大侠观点与我相同,但还是没有解开我的疑团 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 C# 静态类 单例模式 对比 标签:style 生成 nbsp 接口 inf logs code zhang art 原文地址:https://www.cnblogs.com/wintertone/p/11515285.html 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[i] = i;
}
}
public static int get(int i)
{
return arr[i];
}
}
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());
}
}
上一篇:restFull api接口
下一篇:C# Task的简单使用