自定义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类型隐式转换
请大家看看需要其他的改进吗?
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构