• 自定义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类型隐式转换

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

  • 相关阅读:
    django ajax报错解决:You called this URL via POST, but the URL doesn't end in a slash and you have APPEND_SLASH set.
    django使用session报错:no such table: django_session
    centos7下yum安装mariadb
    pip报错解决:EnvironmentError: mysql_config not found
    django报错解决:view must be a callable or a list/tuple in the case of include().
    onpageshow和onpagehide
    深入理解Linux的CPU上下文切换
    看完就彻底懂了红黑树!红黑树的插入、删除、左旋、右旋
    shell根据csv生成sql
    shell中的EOF用法
  • 原文地址:https://www.cnblogs.com/tianqing/p/3574191.html
Copyright © 2020-2023  润新知