实现IDisposable - 一次性字段与一次性属性

Mej*_*ell 14 c#

我在我目前的一个项目上运行VS2013的代码分析,并且遇到了"CA1001:拥有一次性领域的类型应该是一次性的".生成警告(假定DisposableClass工具IDisposable)的简单示例是:

class HasDisposableClassField
{
    private DisposableClass disposableClass;
}
Run Code Online (Sandbox Code Playgroud)

但是,将字段变量转换为属性不再生成警告,即使情况是该属性将由类实例化:

class HasDisposableClassProperty
{
    private DisposableClass disposableClass { get; set; }
    public HasDisposableClassProperty()
    {
        disposableClass = new DisposableClass();
    }
}
Run Code Online (Sandbox Code Playgroud)

在第一种情况下,很明显该类应该实现IDisposable模式,并disposableClass适当地处理它的字段.我的问题:第二种情况是否缺乏对代码分析工具的限制的警告?尽管没有警告,该班级是否仍然实施IDisposable并处置该财产?

Jus*_*ner 14

是的,缺少警告是分析工具的限制.

IDisposable在你自己假设你的IDisposable房产没有从其他地方注入之后,你绝对应该继续实施和清理.


SLa*_*aks 9

是; 你还需要处理它.

把东西放在房产里并不会为你神奇地处理它.

丢失的警告是代码分析的一个错误(它忽略了支持字段,因为它是编译器生成的)