Я получаю предупреждение при запуске некоторого кода с помощью утилиты Code Analysis Visual Studio, которую я не уверен, как ее решить. Возможно, кто-то здесь столкнулся с подобной проблемой, разрешил ее и готов поделиться своим пониманием.CA2000 Передача ссылки объекта на базовый конструктор в C#
Я программирую специально окрашенную ячейку, используемую в элементе управления DataGridView. Код напоминает:
public class DataGridViewMyCustomColumn : DataGridViewColumn
{
public DataGridViewMyCustomColumn() : base(new DataGridViewMyCustomCell())
{
}
Он генерирует следующее предупреждение:
CA2000: Microsoft.Reliability: В методе 'DataGridViewMyCustomColumn.DataGridViewMyCustomColumn()' называют System.IDisposable.Dispose на объекте «новый DataGridViewMyCustomCell() 'прежде чем все ссылки на него выходят за рамки.
Я понимаю, что предупреждает меня DataGridViewMyCustomCell (или класс, который наследует от) реализует IDisposable интерфейса и метод Dispose() должен вызываться для очистки любых ресурсов, заявленных DataGridViewMyCustomCell когда уже нет.
Примеры, которые я видел в Интернете, предлагают использовать блок для охвата времени жизни объекта и система автоматически удаляет его, но база не распознается при перемещении в тело конструктора, поэтому я могу " t напишите вокруг него блок использования ..., который я не уверен, что мне все равно придется делать это, так как это не даст указание запустить время, чтобы освободить объект, который еще может быть использован позже в базовом классе?
Мой вопрос тогда, это код в порядке, как есть? Или, как он может быть реорганизован для разрешения предупреждения? Я не хочу подавлять предупреждение, если это действительно не подходит для этого.
+1 для «полностью разбитого в VS10». Мне очень сложно убедить людей присоединиться ко мне на улучшении качества кода, когда инструменты заставляют меня выглядеть таким глупым ... –