2016-09-17 65 views
-3

我试图找到C#中的所有类,它们实现了Close()。例如,StreamReader,StreamWriterC#包含Close()关闭资源的方法。此外,我注意到有些类实现了IDisposable。所有包含Dispose()的课程是否也包含Close()找出C#中实现Close()方法的所有类?

+3

您的意思是'Dispose'而不是'Destroy'?如果是这样,答案肯定是“不”。许多事情没有'Close'方法实现'IDisposable'。查找“所有类”需要指定您感兴趣的程序集 - 一旦获得了这些程序集,如果可以使用反射来加载它们,那很简单。 –

+1

你为什么要这么做?你有什么尝试?你使用反射还是只想从互联网上获取一个列表? –

+0

您可以在菜单中使用:编辑:查找符号:所有组件。然后搜索关闭。 VS的某些版本从菜单栏中删除了该命令。因此,您可以将自定义按钮添加到工具栏,并使用自定义选项从编辑命令菜单添加命令。右键单击工具栏,然后选择:自定义:命令:编辑:查找符号。 – jdweng

回答

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方法。当你违反规则时,你应该做以上两件事情之一(最好按照惯例后者)。

此外,您并不需要关心所有具有某种方法的类。你只需要运行你的静态分析,它会告诉你什么时候你没有清理干净。你最终会对这种模式非常熟悉。

相关问题