我在项目中使用静态代码分析来检查代码违规.其中一个广泛使用的规则是CA2213,它检查一次性场的正确处理.
我注意到CA2213没有检查处理自动实现的属性.
此外,如果类继承自实现IDisposable的类并且不覆盖Dispose方法,则CA2213不会检查是否处置字段或自动实现的属性.
实际例子:
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 …Run Code Online (Sandbox Code Playgroud)