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)
因为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块内发生任何异常,则无论如何都会处理对象.