计算结构创建的实例数

Mar*_*nix 5 c# struct

我正在寻找一种确定程序中创建的结构对象数量的方法。这是出于教育目的。

我在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仍然相同。