Я использую статический анализ кода в наших проектах для проверки нарушений кода. Одним из широко используемых правил является CA2213, который проверяет правильность размещения одноразовых полей.
Я заметил, что CA2213 не проверяет возможность утилизации автоматически реализованных свойств.
Кроме того, CA2213 не проверяет размещение ни полей, ни автоматически реализованных свойств, если класс наследует класс, который реализует IDisposable и не переопределяет метод Dispose.
Практический пример:
public sealed class Good : IDisposable {
private Font font;
public Font Font {
get { return font; }
set { font = value; }
}
public Good() { font = new Font("Arial", 9); }
public void Dispose() { /* Do nothing */ } // CA2213
}
public sealed class Bad : IDisposable {
public Font Font { get; set; }
public Bad() { Font = new Font("Arial", 9); }
public void Dispose() { /* Do nothing */ } // No warning
}
Кто-нибудь еще сталкивался с таким поведением? Это по дизайну или ошибке в правиле CA2213?