自定义GUID类
今天,同事发了个邮件说需要一个内部使用的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类的更多相关文章
- [转]掌握 ASP.NET 之路:自定义实体类简介 --自定义实体类和DataSet的比较
转自: http://www.microsoft.com/china/msdn/library/webservices/asp.net/CustEntCls.mspx?mfr=true 发布日期 : ...
- java自定义注解类
一.前言 今天阅读帆哥代码的时候,看到了之前没有见过的新东西, 比如java自定义注解类,如何获取注解,如何反射内部类,this$0是什么意思? 于是乎,学习并整理了一下. 二.代码示例 import ...
- 关于MapReduce中自定义分区类(四)
MapTask类 在MapTask类中找到run函数 if(useNewApi){ runNewMapper(job, splitMetaInfo, umbilical, reporter ...
- 关于MapReduce中自定义分组类(三)
Job类 /** * Define the comparator that controls which keys are grouped together * for a single ...
- kettle系列-[KettleUtil]kettle插件,类似kettle的自定义java类控件
该kettle插件功能类似kettle现有的定义java类插件,自定java类插件主要是支持在kettle中直接编写java代码实现自定特殊功能,而本控件主要是将自定义代码转移到jar包,就是说自定义 ...
- java 28 - 4 JDK5的新特性 之 枚举的概述和自定义枚举类
枚举 枚举概述 是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内.举例:一周只有7天,一年只有12个月等. 回想单例设计模式:单例类是一个类只有一个实例 那么多例类就是一个类有多个实例,但 ...
- 客户端使用自定义代理类访问WCF服务 z
通常在客户端访问WCF服务时,都需要添加服务引用,然后在客户端app.config或 web.config文件中产生WCF服务的客户端配置信息.若是每添加一个服务都是这样做,这样势必会将比较麻烦,能否 ...
- Lua调用自定义C++类
弄了一天终于会Lua调用自定义C++类.不容易啊. 我的电脑是64位的,装了64的Python不行,装了32位的就可以了,靠!下面是报错信息 python pyyaml Cheetah全都是装32位的 ...
- cocos2dx-lua绑定自定义c++类(二)
在 cocos2dx-lua绑定自定义c++类(一)中介绍了如何产生绑定文件. 现在,来看看怎么在工程里使用这个cpp文件.像普通源码文件一样,导入到工程里,看到 LuaTest.h文件里有一个函数入 ...
随机推荐
- HTML5分节元素和语义元素
<base> <base> 元素为文档中的所有链接指定基地址.如果URL中含有协议名或"//"则会忽略 <base> 指定的基地址. <! ...
- JDBC编程
简单地说,JDBC 可做三件事:与数据库建立连接.发送 SQL 语句并处理结果.下列代码段给出了以上三步的基本示例: Connection con = DriverManager.getConnect ...
- C fread
fread是一个函数.从一个文件流中读数据,最多读取count个元素,每个元素size字节,如果调用成功返回实际读取到的元素个数,如果不成功返回 0. 函数原型 size_t fread ( void ...
- C#枚举类型
枚举是一个指定的常数,其基础类型可以是除 Char 外的任何整型.如果没有显式声明基础类型,则使用 Int32. 定义 默认基数从0开始,也可指定数值. enum Days { Saturday, / ...
- 阿里云服务器Linux CentOS安装配置(二)yum安装svn
阿里云服务器Linux CentOS安装配置(二)yum安装svn 1.secureCRT连接服务器 2.先创建一个文件夹,用来按自己的习惯来,用来存放数据 mkdir /data 3.yum安装sv ...
- JavaScript自学之数组排序
<html> <head> <title>数组排序</title> <script type="text/javascript" ...
- Self-Host Web API 学习笔记
ASP.NET Web API 不需要 IIS,直接使用控制台程序可以实现. 一.创建一个新的控制台程序,项目名为 HostApi 二.设置目标框架为.NET Framework 4 三.NuGet添 ...
- maven settings.xml 阿里云
<?xml version="1.0" encoding="UTF-8"?> <!--Licensed to the Apache Softw ...
- freebsd启动报错:My unqualified host name unkown...Sleeping for retry.
原文 http://blog.163.com/sujoe_2006/blog/static/335315120111158576591/ 病状:启动报"My unqualified host ...
- MXNET手写体识别的例子
安装完MXNet之后,运行了官网的手写体识别的例子,这个相当于深度学习的Hello world了吧.. http://mxnet.io/tutorials/python/mnist.html 运行的过 ...