zoukankan      html  css  js  c++  java
  • 自定义GUID类

    今天,同事发了个邮件说需要一个内部使用的GUID类,而不是System.Guid 结构体。什么意思呢?

    例如public void Test(string guidPara) 这个方法的参数是个string类型,但是是通过参数名称告诉调用者是Guid类型的参数,因此,他需要的应该是:

          public void Test(GUID para),  参数类型这么修改后,所有调用的地方需要统一改一遍,这不很恶。所以,实现了自定义的GUID类:

     1 public class GUID
     2     {
     3         #region 构造函数
     4 
     5         /// <summary>
     6         /// 构造函数
     7         /// </summary>
     8         public GUID() { }
     9 
    10         /// <summary>
    11         /// 构造函数
    12         /// </summary>
    13         /// <param name="guid">Guid</param>
    14         public GUID(string guid)
    15         {
    16             Value = guid;
    17         }
    18 
    19         /// <summary>
    20         /// 构造函数
    21         /// </summary>
    22         /// <param name="guid">Guid</param>
    23         /// <returns></returns>
    24         public static implicit operator GUID(string guid)
    25         {
    26             return new GUID(guid);
    27         }
    28 
    29         #endregion
    30 
    31         #region 属性
    32 
    33         private string guidValue;
    34 
    35         /// <summary>
    36         /// Guid
    37         /// </summary>
    38         public string Value
    39         {
    40             get
    41             {
    42                 if (string.IsNullOrWhiteSpace(guidValue))
    43                     guidValue = Guid.NewGuid().ToString();
    44 
    45                 return guidValue;
    46             }
    47             private set
    48             {
    49                 guidValue = value;
    50             }
    51         }
    52 
    53         #endregion
    54 
    55         /// <summary>
    56         /// 重载ToString方法
    57         /// </summary>
    58         /// <returns>Value</returns>
    59         public override string ToString()
    60         {
    61             return guidValue;
    62         }
    63     }

    单元测试下:

     1 [TestMethod]
     2         public void GUIDTest1()
     3         {
     4             var guid = new GUID("97b7e1ab-db31-4679-8a3c-59f0101c7497");
     5             Assert.AreEqual("97b7e1ab-db31-4679-8a3c-59f0101c7497", guid.Value);
     6         }
     7 
     8         [TestMethod]
     9         public void GUIDTest2()
    10         {
    11             GUID guid = "97b7e1ab-db31-4679-8a3c-59f0101c7497";
    12             Assert.AreEqual("97b7e1ab-db31-4679-8a3c-59f0101c7497", guid.Value);
    13         }
    14 
    15         [TestMethod]
    16         public void GUIDTest3()
    17         {
    18             var guidValue = GetGuidValue("97b7e1ab-db31-4679-8a3c-59f0101c7497");
    19             Assert.AreEqual("97b7e1ab-db31-4679-8a3c-59f0101c7497", guidValue);
    20         }
    21 
    22         private string GetGuidValue(GUID guid)
    23         {
    24             return guid.Value;
    25         }

    自然好了很多,已有程序不需要进行修改,GUID在整个运行时也进行了强类型处理,有以下几个特点:

    1.GUID强类型

    2.GUID实例缓存了Value成员,new 操作自动生成Guid。

    3.string类型隐式转换

    请大家看看需要其他的改进吗?

  • 相关阅读:
    实习第一天
    附加、分离数据库和备份、还原数据库的区别(转载于中雪的BLOG)
    2014-08-29 Last Day
    2014-08-26 解决HttpContext.Current.Session在ashx文件中出现“未将对象引用设置到对象的实例”的问题
    什么是Ajax? (转载于疯狂客的BLOG)
    Response.Expires 属性 (转载于疯狂客的BLOG)
    2014-08-22 关于Response、Request等对象在cs文件中的使用
    ASP.NET获取IP的6种方法(转载于LanceZhang's Tech Blog)
    2014-08-13 SQL语句之Left Join
    2014-08-07 优秀程序员所应具备的思想
  • 原文地址:https://www.cnblogs.com/tianqing/p/3574191.html
Copyright © 2011-2022 走看看