csharp设计方法


public class hugryman

私有构造

private hugryman()

私有静态只读实例化

private static readonly hugryman _hugryman=new hugryman();

公有静态读取方法

public static hugryman()

return _hungryman

多次获取的是同一个实例

gethashcode发现是同一个对象

数值一样



缺点

一开始就实例化 浪费性能




改懒汉式

layman

私有构造

私有静态字段

private static _layman

公有静态读取同时实例化

在getlazyman里面实例化

null的时候创建 防止多次实例化

(都要静态)



缺点

会重复创建

如果多个程序同时进入,会实例化多次

重复实例化的缺点

改进方法:

var obj=new object()

lock(obj)

{

}

花括号的内容只允许一个线程进行

例子

private static layman _layman

public static layman getlazyman()

lock(o){

if (_layman==NULL)

{_lazyman=new lazyman()}

}

return _layman

lock实际上是

monitor.enter()

monitor.exit()

防止指针重排的方法

volatile



饿汉式的改造方法

静态内部类

hugrymanstatic

private hungrymanstatic()

private static class innerclass()

{

var _hungrymanstatic=new hungrymanstatic()

}

public static Gethungrymanstatic()

{

return _hungrymanstatuc

}

静态内部类 只在类加载的时候创建一次实例

不会浪费资源



相关推荐
专注VB编程开发20年18 小时前
c#语法和java相差多少
java·开发语言·microsoft·c#
SmoothSailingT19 小时前
C#——Lazy<T>懒加载机制
开发语言·单例模式·c#·懒加载
czhc114007566319 小时前
c# 1216
windows·microsoft·c#
幸存者letp19 小时前
为什么 max(words, key=len) 中需要传 key=len
服务器·开发语言·c#
SmoothSailingT20 小时前
C#——Interface(接口)
开发语言·c#·接口
Henry_Wu00120 小时前
go与c# 及nats和rabbitmq交互
golang·c#·rabbitmq·grpc·nats
烛阴21 小时前
深入 C# 字符串世界:基础语法、常用方法与高阶实战
前端·c#
用户44884667106021 小时前
.NET进阶——深入理解线程(2)Thread入门到精通
c#·.net
民乐团扒谱机1 天前
【微实验】基于Python实现的实时键盘鼠标触控板拾取检测(VS2019,附完整代码)
python·c#·计算机外设
CreasyChan1 天前
Unity中C#状态模式详解
unity·c#·状态模式