关于IDisposable的问题

Cap*_*mic 4 .net c# idisposable

我的问题是为什么我需要IDisposable?我有一个类消耗一些需要释放的资源.我有两个选择

没有IDisposable

class SomeUtilityClass
{
 public Stop()
 {
   // free resources
 }
}
Run Code Online (Sandbox Code Playgroud)

使用IDisposable

    class SomeUtilityClass, IDisposable
    {
     public void Dispose()
     {
       // free resources
     }
    }
Run Code Online (Sandbox Code Playgroud)

那我为什么需要IDisposable呢?它没有如何命名该功能.

class Program
{

 public Main(..)
 {
   SomeUtilityClass _class = new SomeUtilityClass();

   // clean up when we've done

  _class.Stop();

   // OR
  _class.Dispose();

 }
}
Run Code Online (Sandbox Code Playgroud)

And*_*zub 5

因为IDis支持IDisposable,你可以使用很酷的using语法:

using (IDisposable someDisposable = new ...)
{
    // your code with someDisposable 
}
Run Code Online (Sandbox Code Playgroud)

这实际上是由编译器转换为:

IDisposable someDisposable = new ...
IDisposable someDisposable2 = someDisposable ;
try
{
    // your code with someDisposable 
}
finally
{
    if (someDisposable2 != null)
    {
        someDisposable2.Dispose();
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,如果在using块内发生任何异常,则无论如何都会处理对象.

  • 是的,还要创建所有c#开发人员使用的通用模式. (4认同)