我正在寻找一种确定程序中创建的结构对象数量的方法。这是出于教育目的。
我在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 same.
[TestMethod]
public void HowManyTimesIsACarCreated()
{
Car firstCar = new Car();
Car sameCar = firstCar;
sameCar.brand = "Opel";
// It seems that you can change sameCar without changing firstCar
Assert.AreNotEqual(firstCar.brand, sameCar.brand);
// This one is tricky, because firstCar and sameCar are passed as parameters, so new objects would again be created as I would see it.
Assert.IsFalse(ReferenceEquals(firstCar, sameCar));
}
Run Code Online (Sandbox Code Playgroud)
firstCar和sameCar不指向同一对象,因为如果sameCar我可以更改品牌,但是firstCar仍然相同。
| 归档时间: |
|
| 查看次数: |
99 次 |
| 最近记录: |