如何在finally块中销毁一个对象。
例如
Public void fnName()
{
ClassName obj = new ClassName();
try {
}
catch() {
}
finally {
// destroy obj here
}
}
什么都不需要做。您的引用(obj)将超出范围。然后垃圾收集器会删除您的对象。
如果有需要立即销毁的(非托管)资源,则实现IDisposable接口并在finalize块中调用Dispose。或者更好的方式是使用using语句。
编辑
如评论中所建议的,当您的ClassName实现了IDisposable时,您可以选择执行以下操作:
ClassName obj = null;
try{
obj = new ClassName();
//do stuff
}
finally{
if (obj != null) { obj.Dispose(); }
}
或者,使用 using
语句:
using (var obj = new ClassName())
{
// do stuff
}
using
可能会有帮助。 - hatchet - done with SOverflowDestroy
的内容。相反,我们称之为Dispose
。Dispose
该对象:Public void fnName()
{
ClassName obj=new ClassName();
try
{
}
catch()
{
}
finally
{
obj.Dispose();
}
}
...并在您的类中按照下面所示实现Dispose
功能:
/// <summary>
/// Dispose all used resources.
/// </summary>
public void Dispose()
{
this.Dispose(true);
GC.SuppressFinalize(this);
}
/// <summary>
/// Dispose all used resources.
/// </summary>
/// <param name="disposing">Indicates the source call to dispose.</param>
private void Dispose(bool disposing)
{
if (this.disposed)
{
return;
}
if (disposing)
{
////Number of instance you want to dispose
}
}
延长对象生命周期的另一种方法是将代码写在 using
块中,如下所示:
using(var obj = new ClassName())
{
}
For more details for using check it here
obj=null;
。如果它没有被其他地方引用,垃圾回收器会处理它。 - vesanIDisposable
,否则不必担心它。 - Sayse