• dotnet3.5下Singleton辅助类实现


          经常要用到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
  • 相关阅读:
    shell脚本修改文件
    腾讯企业邮箱获取客户端专用密码(授权码)
    java内存dump文件导出与查看
    为什么MySQL数据库索引选择使用B+树?
    nginx 平滑重启的实现方法
    nginx重启 平滑重启
    Nginx常用的平滑重启
    nginx reload和reopen
    转载【小程序】: 微信小程序开发---应用与页面的生命周期
    【微信小程序】用户首次进入小程序拒绝授权,如何再次调用授权页面,获取用户信息userInfo
  • 原文地址:https://www.cnblogs.com/wintersun/p/1364023.html
Copyright © 2020-2023  润新知