【发布时间】:2021-03-05 17:50:54
【问题描述】:
我有一个类,据说可以处理 uint 类型的唯一 ID 的生成。然而,多次使用后,uint 值似乎并没有增加。
static class UniqueIdGenerator
{
public static uint nextUnique;
public static uint GetNextUnique()
{
nextUnique++;
return nextUnique;
}
}
此类用于在其他类上调用它时分配一个唯一的整数 ID。例如下面的两个示例构造函数都有一个 ID 属性,该属性应该从 UniqueIdGenerator 类中获取其值
public Car()
{
carNumber = UniqueIdGenerator.GetNextUnique();
}
public Boat()
{
boatNumber = UniqueIdGenerator.GetNextUnique();
}
【问题讨论】:
-
提示:在引用实例成员时始终使用
this.,并使用_作为静态成员的前缀,或者使用类型名称作为说明符。否则无法从您发布的代码中判断carNumber是否为static。 -
您应该使用
return Interlocked.Increment( ref staticVar )而不是使用++运算符 - 否则您会遇到并发问题。 -
@Dai 如果有多个线程。如果它是 Web 应用程序,可能会发生。 nextUnique 未初始化为零。
标签: c# unique unique-id id-generation