GUID
(全局唯一标识符)是一个128位的数字,通常用来唯一标识信息。GUID 的生成算法保证了在相同的时空条件下,基本上不会生成重复的值。这是因为GUID的生成算法结合了多种不同的信息,包括时间戳、计算机的 MAC 地址、随机数等,从而大大降低了生成重复值的可能性。
具体来说,通常情况下,GUID 包含了以下信息:
- 时间戳:生成 GUID 的时候会包含当前的时间信息,精确到毫秒,这保证了在同一台计算机上生成的 GUID 在不同时间点是不同的。
- MAC 地址:通常会包含生成时计算机的 MAC 地址,这确保了在不同计算机上生成的 GUID 是不同的。
- 随机数:GUID 中也包含了一个随机生成的部分,确保了即使在相同时间点和相同计算机上也不会生成重复的值。
综合上述因素,GUID 的生成算法确保了在现实应用中,生成重复值的可能性极低,接近于零。当然,并不是绝对不会出现重复值,这种情况的概率极小,但是并不是完全不可能。
因此,通过合理设计的生成算法,GUID 能够在大多数情况下确保唯一性,这也使得它成为在分布式系统中用来唯一标识信息的一种常见选择。
用例
using System;public class MyClass
{public Guid UniqueId { get; }public MyClass(){UniqueId = Guid.NewGuid();}
}class Program
{static void Main(){MyClass obj1 = new MyClass();MyClass obj2 = new MyClass();Console.WriteLine("obj1 UniqueId: " + obj1.UniqueId);Console.WriteLine("obj2 UniqueId: " + obj2.UniqueId);}
}
Tips
Guid 结构体的未初始化时,默认值是 Guid.Empty,这个属性表示一个空的 Guid,其值为全零(即所有位都为零)
using System;class Program
{static void Main(){Guid uninitializedGuid;Console.WriteLine("未初始化的 Guid 值为:" + uninitializedGuid);Console.WriteLine("是否为默认值 Guid.Empty: " + (uninitializedGuid == Guid.Empty));}
}