Подсчитать количество созданных экземпляров структуры - PullRequest
5 голосов
/ 13 июня 2019

Я ищу способ определить количество объектов 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 остается тем же.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...