我试图找到C#
中实现Close()
的所有课程。例如,Socket
中的StreamReader
,StreamWriter
,C#
类包含用于关闭资源的Close()
方法。而且,我注意到有些类实现了IDisposable
。包含Dispose()
的所有类都包含Close()
。
答案 0 :(得分:1)
规则违规试图告诉您在try中初始化的类实现了IDisposable,并且您没有任何调用Dispose来回收其非托管资源的代码。实现IDisposable的类实际上“通知您”需要明确清理它们。这是.Net中非常常见的模式。
您可以执行以下操作:
SomeClassThatImplementsIDisposable x = null;
try
{
x = new SomeClassThatImplementsIDisposable();
//--> call methods on x...
}
finally
{
x.Dispose();
}
...但是,更常见的是使用using
块:
using ( var x = new SomeClassThatImplementsIDisposable() )
{
//--> call methods on x...
}
...这会导致编译器从您的使用块中构建try/finally
块。
所以...这不是你应该关注的Close
方法。当你违反规则时,你应该做以上两件事之一(最好按照惯例)。
此外,您并不需要关心所有具有某种方法的类。您只需要运行静态分析,它会告诉您何时没有清理过。你最终会对这种模式非常熟悉。