-3
我试图找到C#
中的所有类,它们实现了Close()
。例如,StreamReader
,StreamWriter
类C#
包含Close()
关闭资源的方法。此外,我注意到有些类实现了IDisposable
。所有包含Dispose()
的课程是否也包含Close()
。找出C#中实现Close()方法的所有类?
我试图找到C#
中的所有类,它们实现了Close()
。例如,StreamReader
,StreamWriter
类C#
包含Close()
关闭资源的方法。此外,我注意到有些类实现了IDisposable
。所有包含Dispose()
的课程是否也包含Close()
。找出C#中实现Close()方法的所有类?
该规则违规尝试告诉您,您在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
方法。当你违反规则时,你应该做以上两件事情之一(最好按照惯例后者)。
此外,您并不需要关心所有具有某种方法的类。你只需要运行你的静态分析,它会告诉你什么时候你没有清理干净。你最终会对这种模式非常熟悉。
您的意思是'Dispose'而不是'Destroy'?如果是这样,答案肯定是“不”。许多事情没有'Close'方法实现'IDisposable'。查找“所有类”需要指定您感兴趣的程序集 - 一旦获得了这些程序集,如果可以使用反射来加载它们,那很简单。 –
你为什么要这么做?你有什么尝试?你使用反射还是只想从互联网上获取一个列表? –
您可以在菜单中使用:编辑:查找符号:所有组件。然后搜索关闭。 VS的某些版本从菜单栏中删除了该命令。因此,您可以将自定义按钮添加到工具栏,并使用自定义选项从编辑命令菜单添加命令。右键单击工具栏,然后选择:自定义:命令:编辑:查找符号。 – jdweng