Я выполнял анализ кода VS2013 в одном из моих текущих проектов и натолкнулся на «CA1001: Типы, которые имеют одноразовые поля, должны быть одноразовыми». Простой пример, который генерирует предупреждение (предполагая DisposableClass
орудия IDisposable
) является:Реализация IDisposable - одноразовые поля или одноразовые свойства
class HasDisposableClassField
{
private DisposableClass disposableClass;
}
Однако преобразование переменного поля в свойстве больше не выдает предупреждение, даже если обстоятельство, что свойство будет экземпляр самыми класс:
class HasDisposableClassProperty
{
private DisposableClass disposableClass { get; set; }
public HasDisposableClassProperty()
{
disposableClass = new DisposableClass();
}
}
В первом случае ясно, что класс должен реализовывать IDisposable шаблон, и утилизировать ее disposableClass
поле соответствующим образом. Мой вопрос: является ли отсутствие предупреждения для второго случая ограничением инструмента анализа кода? Должен ли класс по-прежнему реализовывать IDisposable и распоряжаться этим свойством, несмотря на отсутствие предупреждения?
Вы уверены, что это ошибка, а не намеренная? Возможно, он не считает свойство get/set «владельцем» одноразового объекта. – Gabe
@Gabe: Да, но он должен сообщать об этом из поля поддержки, созданного компилятором. – SLaks
Почему частное поле поддержки подразумевает «собственность»? – Gabe