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

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

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

 public class GUID
{
#region 构造函数 /// <summary>
/// 构造函数
/// </summary>
public GUID() { } /// <summary>
/// 构造函数
/// </summary>
/// <param name="guid">Guid</param>
public GUID(string guid)
{
Value = guid;
} /// <summary>
/// 构造函数
/// </summary>
/// <param name="guid">Guid</param>
/// <returns></returns>
public static implicit operator GUID(string guid)
{
return new GUID(guid);
} #endregion #region 属性 private string guidValue; /// <summary>
/// Guid
/// </summary>
public string Value
{
get
{
if (string.IsNullOrWhiteSpace(guidValue))
guidValue = Guid.NewGuid().ToString(); return guidValue;
}
private set
{
guidValue = value;
}
} #endregion /// <summary>
/// 重载ToString方法
/// </summary>
/// <returns>Value</returns>
public override string ToString()
{
return guidValue;
}
}

单元测试下:

 [TestMethod]
public void GUIDTest1()
{
var guid = new GUID("97b7e1ab-db31-4679-8a3c-59f0101c7497");
Assert.AreEqual("97b7e1ab-db31-4679-8a3c-59f0101c7497", guid.Value);
} [TestMethod]
public void GUIDTest2()
{
GUID guid = "97b7e1ab-db31-4679-8a3c-59f0101c7497";
Assert.AreEqual("97b7e1ab-db31-4679-8a3c-59f0101c7497", guid.Value);
} [TestMethod]
public void GUIDTest3()
{
var guidValue = GetGuidValue("97b7e1ab-db31-4679-8a3c-59f0101c7497");
Assert.AreEqual("97b7e1ab-db31-4679-8a3c-59f0101c7497", guidValue);
} private string GetGuidValue(GUID guid)
{
return guid.Value;
}

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

1.GUID强类型

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

3.string类型隐式转换

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

自定义GUID类的更多相关文章

  1. [转]掌握 ASP.NET 之路:自定义实体类简介 --自定义实体类和DataSet的比较

    转自: http://www.microsoft.com/china/msdn/library/webservices/asp.net/CustEntCls.mspx?mfr=true 发布日期 : ...

  2. java自定义注解类

    一.前言 今天阅读帆哥代码的时候,看到了之前没有见过的新东西, 比如java自定义注解类,如何获取注解,如何反射内部类,this$0是什么意思? 于是乎,学习并整理了一下. 二.代码示例 import ...

  3. 关于MapReduce中自定义分区类(四)

    MapTask类 在MapTask类中找到run函数 if(useNewApi){       runNewMapper(job, splitMetaInfo, umbilical, reporter ...

  4. 关于MapReduce中自定义分组类(三)

    Job类  /**    * Define the comparator that controls which keys are grouped together    * for a single ...

  5. kettle系列-[KettleUtil]kettle插件,类似kettle的自定义java类控件

    该kettle插件功能类似kettle现有的定义java类插件,自定java类插件主要是支持在kettle中直接编写java代码实现自定特殊功能,而本控件主要是将自定义代码转移到jar包,就是说自定义 ...

  6. java 28 - 4 JDK5的新特性 之 枚举的概述和自定义枚举类

    枚举 枚举概述 是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内.举例:一周只有7天,一年只有12个月等. 回想单例设计模式:单例类是一个类只有一个实例 那么多例类就是一个类有多个实例,但 ...

  7. 客户端使用自定义代理类访问WCF服务 z

    通常在客户端访问WCF服务时,都需要添加服务引用,然后在客户端app.config或 web.config文件中产生WCF服务的客户端配置信息.若是每添加一个服务都是这样做,这样势必会将比较麻烦,能否 ...

  8. Lua调用自定义C++类

    弄了一天终于会Lua调用自定义C++类.不容易啊. 我的电脑是64位的,装了64的Python不行,装了32位的就可以了,靠!下面是报错信息 python pyyaml Cheetah全都是装32位的 ...

  9. cocos2dx-lua绑定自定义c++类(二)

    在 cocos2dx-lua绑定自定义c++类(一)中介绍了如何产生绑定文件. 现在,来看看怎么在工程里使用这个cpp文件.像普通源码文件一样,导入到工程里,看到 LuaTest.h文件里有一个函数入 ...

随机推荐

  1. Python实战2( 接上):扫描多余中文

    还是接上一篇,扫描多余中文,支持自定义忽略字段 源代码,详看   http://pan.baidu.com/s/1ntC78Zv   ScanChinese.zip

  2. BZOJ 2761: [JLOI2011]不重复数字 水题

    2761: [JLOI2011]不重复数字 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2100  Solved: 809 题目连接 http:// ...

  3. Learn ZYNC (2)

    AXI HP接口的DMA+GIC编程(参照博客) 参照文档:UG873,博客文档 参考设计代码文件:ug873源码 我的Vivado+SDK工程文件打包(60+M) 我的DMA驱动程序(已完成) Vi ...

  4. 【iCore3 双核心板_FPGA】实验二十五:NIOS II之UART串口通信实验

    实验指导书及代码包下载: http://pan.baidu.com/s/1eRMZq18 iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...

  5. Neil·Zou 语录二

    1 “Later equals never !”LeBlanc法则   2 爱情使人忘记时间,时间也会使人忘记爱情,不要让太多的昨天占据你的今天,请相信:是你的不管你怎样任性他都不会离开你:失去的其实 ...

  6. Flink - NetworkEnvironment

    NetworkEnvironment 是一个TaskManager对应一个,而不是一个task对应一个 其中最关键的是networkBufferPool, operator产生的中间结果,Result ...

  7. 带你玩转JavaWeb开发之三 -JS插件实战开发

    前提:需要掌握的知识点           填写HTML代码 Element元素中有一个innerHTML属性,这个属性可以填写一段html代码 innerHTML = "<font ...

  8. Python先合并再排序

    前几天遇到的美团笔试题 题目:大概要求输入两组数字,对这两组数值排序然后输出结果 思路:输入两组数,合并两组数,排序 list1 = raw_input("input some number ...

  9. win7+vs2008+windows mobile6.5.3

    1.安装vs2008+vs2008sp12.安装Windows Mobile 6 Professional SDK Refresh.msi3.安装Windows Mobile 6 Profession ...

  10. Servlet 3.0

    Servlet 3.0 作为 Java EE 6 规范体系中一员,随着 Java EE 6 规范一起发布.该版本在前一版本(Servlet 2.5)的基础上提供了若干新特性用于简化 Web 应用的开发 ...