c# 不同单例的不同意义
c# 不同 单例 意义
2023-09-14 08:59:24 时间
前言
在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控制。
相关文章
- C# 网络编程之豆瓣OAuth2.0认证详解和遇到的各种问题及解决
- C# 计时器的三种使用方法
- C#.NET常见问题(FAQ)-如何在不同窗体之间传递值
- C# 调用 Outlook发送邮件实例
- C# 委托应用总结
- C#设计模式——职责链模式(Chain Of Responsibility Pattern)
- 重新整理数据结构与算法(c#)——算法套路k克鲁斯算法[三十]
- 重新整理数据结构与算法(c#系列)—— 树的前中后序遍历[十六]
- C# 判断字符串是否可以转化为数字
- C# 调用dll获取dll物理路径的方法
- Atitit.加密算法 des aes 各个语言不同的原理与解决方案java php c#
- C# winform 遍历所有页面的所有控件 ,然后判断组件类型是什么
- (三十一)c#Winform自定义控件-文本框(四)-HZHControls
- C#委托和事件开发中的实例-类操纵窗体动态显示内容
- CSharp(C#)语言_第十一章(委托)
- C#中实现可变参数实例
- [C#]c#中数据的同步加锁机制 的几种方法