我想从多个线程递增无符号整数.
我知道Interlocked.Increment,但它不处理无符号整数.我可以使用lock(),但出于性能原因我不愿意.
它只是以正常方式增加它的线程安全吗?如果偶尔的增量丢失也没关系,因为它只用于统计.我不想要的是腐败的价值.
我有一个基类和几个派生类(例如Base和ChildA : Base).每次我创建一个ChildA类的实例时,我希望它被分配一个唯一的实例编号(类似于关系数据库中的自动增量ID,但对于我在内存中的类而不是在数据库中).
我的问题类似于这个问题,但有一个明显的区别:我希望基类自动处理这个问题.对于我的每个派生类(ChildA,ChildB,ChildC等),我希望基类保持单独的计数,并在创建该派生类的新实例时增加它.
所以,我Base班上的信息可能最终看起来像这样:
ChildA,5
ChildB,6
ChildC,9
Run Code Online (Sandbox Code Playgroud)
如果我然后实例化一个新的ChildB(var instance = new ChildB();),我希望ChildB被赋予id 7,因为它从6开始.
然后,如果我实例化一个新的ChildA,我希望ChildA被分配id 6.
-
我怎样才能在Base班级的构造函数中处理这个问题?
我正在寻找一种确定程序中创建的结构对象数量的方法。这是出于教育目的。
我在SO上找到了这个答案,它适用于以下类:https : //stackoverflow.com/a/12276687/363224。因此,我尝试使用进行类似的操作struct,但正如预期的那样,它并不起作用。
public struct Car
{
public string brand;
public static int ObjectsConstructed { get; private set; }
public Car(string brand)
{
this.brand = brand;
ObjectsConstructed++;
}
}
...
Car car1 = new Car("VW");
Car car2 = car1; // How can we increment the ObjectsConstructed?
List<Car> carList = new List<Car>();
carList.Add(car1); // How can we increment the ObjectsConstructed?
Run Code Online (Sandbox Code Playgroud)
该Car(string)构造不叫,因为结构对象的拷贝被称为某种的memcpy,并通过构造不走。结构也不允许显式的无参数构造函数。
如何使一种可以处理的副本构造函数呢?还是有其他方法可以通过反射将这些信息从运行时中取出?
编辑
我写了一个测试来说明我的意思:
// This test passes, firstCar and sameCar are not the …Run Code Online (Sandbox Code Playgroud) 如何在该类的方法中计算类类型的对象数?就此而言,如何在不在列表中添加对象的情况下在类之外执行此操作?
我应该想到这个!谢谢!我会在一段时间内没有回答,看看是否有更好的方法,因为我同意.我只是把头包裹在OO周围.如果你不介意让我解释一下,也许总的来说有更好的方法吗?
我有一个对象类,我想添加3条信息,但首先我要循环并确保没有其他对象与三个部分中的任何一个相同,如果有,为每个做不同的事情案件.