posts - 929,  comments - 588,  views - 401万
< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

      经常要用到Singleton模式,通常情况下我们是为那个类写一个static method来创建对象。.net3.5下,可以封装这么一个辅助类,
看代码如下:

复制代码
 1     #region Singleton
 2     /// <summary>
 3     /// Used for classes that are single instances per appdomain
 4     /// </summary>
 5     public static class Singleton
 6     {
 7         private static class Storage<T>
 8         {
 9             internal static T s_instance;
10         }
11 
12         /// <summary>
13         /// Gets the instance.
14         /// </summary>
15         /// <typeparam name="T">Func<T></typeparam>
16         /// <param name="op">The op.</param>
17         /// <returns>T</returns>
18         /// <remark>Author : PetterLiu 2008-12-2816:02  http://wintersun.cnblogs.com </remark>
19         public static T GetInstance<T>(Func<T> op)
20         {
21             if (Storage<T>.s_instance == null)
22             {
23                 lock (typeof(Storage<T>))
24                 {
25                     if (Storage<T>.s_instance == null)
26                     {
27                         T temp = op();
28                         System.Threading.Thread.MemoryBarrier();
29                         Storage<T>.s_instance = temp;
30                     }
31                 }
32             }
33             return Storage<T>.s_instance;
34         }
35 
36         /// <summary>
37         /// Gets the instance.
38         /// </summary>
39         /// <typeparam name="T">T</typeparam>
40         /// <returns>T</returns>
41         /// <remark>Author : PetterLiu 2008-12-2816:02  http://wintersun.cnblogs.com </remark>
42         public static T GetInstance<T>()
43             where T : new()
44         {
45             return GetInstance(() => new T());
46         }
47     }
48     #endregion
复制代码

UnitTest:
Test

http://wintersun.cnblogs.com
posted on   PetterLiu  阅读(957)  评论(3编辑  收藏  举报
编辑推荐:
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
阅读排行:
· .NET 使用 DeepSeek R1 开发智能 AI 客户端
· 10亿数据,如何做迁移?
· 推荐几款开源且免费的 .NET MAUI 组件库
· c# 半导体/led行业 晶圆片WaferMap实现 map图实现入门篇
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
点击右上角即可分享
微信分享提示