Я выполняю полный анализ кода в своем проекте, и он говорит, что у него 500 проблем. Сейчас я сократил его до 300, но я борюсь с проблемой, для которой не могу найти решения.
Правило CA2000 гласит:
Если одноразовый объект не удаляется явно до того, как все ссылки на него будут вне области действия, объект будет удален в неопределенное время, когда сборщик мусора запустит финализатор объекта. Поскольку может произойти исключительное событие, препятствующее запуску финализатора объекта, вместо этого объект должен быть удален явно.
Более подробную информацию о правиле можно найти на странице, указанной выше.
Код, в котором правило не работает, таков:
internal Window(Game game, Control parent, string title, bool visible)
: base(game, parent, visible, new ScreenspaceRectangle(game, Color.Black, Vector.Zero, Vector.Zero))
{
}
А описание такое:
CA2000: Microsoft.Reliability: в методе «Window.Window(Game, Control, string, bool)» вызовите System.IDisposable.Dispose для объекта «new ScreenspaceRectangle(game, Color.Black, Vector.Zero, Vector.Zero)» прежде чем все ссылки на него выходят за рамки.
Я понимаю, что эту проблему можно решить обычным образом, используя оператор «using» вокруг создаваемого объекта, чтобы убедиться, что он всегда правильно утилизирован. Но как решить в этом случае?