Я ищу способ определить количество объектов 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?
Конструктор Car(string)
не вызывается, потому что копия объекта struct называется своего рода memcpy и не проходит через конструктор.Структура также не допускает явных конструкторов без параметров.
Как создать конструктор копирования, который можно обработать?Или есть другой способ получить эту информацию из среды выполнения с помощью отражения?
EDIT
Я написал тест, который показывает, что я имею в виду:
// 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));
}
firstCar и sameCar не указывают на один и тот же объект, так как я могу изменить марку, если sameCar, но firstCar остается тем же.