Buc*_*cks 6 c# refactoring idisposable coderush
我正在研究"学习计划"并使用Code Rush重构工具和我的学习.随着Code Rush的最新更新,它一直建议在我的程序中实现IDisposable.我知道MSDN对IDisposable的看法,我对它的作用有一个真正基本的了解,但因为我不知道实现它的所有含义我一直忽略了这个建议.今天我决定更多地了解它并同意推荐.
这是它添加到我的程序中的内容.
class Program : IDisposable
{
static Service _proxy;
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (disposing)
if (_proxy != null)
{
_proxy.Dispose();
_proxy = null;
}
}
~Program()
{
Dispose(false);
}
Run Code Online (Sandbox Code Playgroud)
所以我的问题就是这个.这样做我需要做些什么来获得IDisposable的优势,还是我需要在代码中做一些事情才能使它工作?我在其上设置了一个断点,并且从未通过调试器到达它,因此要么不需要它,要么我没有按照预期的方式使用它.有人可以说明这对我的影响或我应该如何使用它以便它确实为我做了些什么?
Ree*_*sey 10
在这种情况下,CodeRush建议你实现,IDisposable因为你的类封装了一个IDisposable资源(它正在看_proxy,虽然这不是一件好事,因为它是静态的).Code Rush认为你正在使用的类型应该明确清理,但是你没有提供一种方法来通过你的课程来完成.
话虽这么说,但是IDisposable很棘手 - 这就是生成的代码实际上并不是一个好的实现(即使_proxy是一个实例变量)的情况.在这种情况下,我建议不要使用析构函数.它会导致GC中的性能问题,在这种情况下,对安全性没有帮助,因为封装的资源应该处理您忘记Dispose()为您调用的情况.有关详细信息,请参阅我在IDisposable上的系列,特别是封装IDisposable类.
另外,这个类不应该实现IDisposable(除非有其他理由这样做)给定上面的代码,因为_proxy资源是static.从一个实例中处置静态资源可能会导致问题,至少在一般情况下如此.(在这种情况下,它显然没有问题,但它不是一个好的做法......)通常,静态变量与实例成员的生命周期非常不同,因此自动处理它是不合适的.
| 归档时间: |
|
| 查看次数: |
340 次 |
| 最近记录: |