C# 销毁C中的对象#
如何在最终块中销毁对象 比如说C# 销毁C中的对象#,c#,object,C#,Object,如何在最终块中销毁对象 比如说 Public void fnName() { ClassName obj = new ClassName(); try { } catch() { } finally { // destroy obj here } } 首先,在C语言中没有所谓的Destroy。相反,我们称之为Dispose 当对象超出范围时,会自动执行清理过程,但对于套接字、db调用等非托管资源,您需要Dispo
Public void fnName()
{
ClassName obj = new ClassName();
try {
}
catch() {
}
finally {
// destroy obj here
}
}
首先,在C语言中没有所谓的
Destroy
。相反,我们称之为Dispose
当对象超出范围时,会自动执行清理过程,但对于套接字、db调用等非托管资源,您需要Dispose
对象,如下所示:
Public void fnName()
{
ClassName obj=new ClassName();
try
{
}
catch()
{
}
finally
{
obj.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(var obj = new ClassName())
{
}
…并在类中实现Dispose
功能,如下所示:
Public void fnName()
{
ClassName obj=new ClassName();
try
{
}
catch()
{
}
finally
{
obj.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(var obj = new ClassName())
{
}
有关使用的更多详细信息,请选中它。您的参考(obj)将超出范围。然后垃圾收集器将出现并销毁您的对象 如果有(非托管)资源需要立即销毁,则实现IDisposable接口并在finalize块中调用Dispose。或者更好地使用using语句 编辑 正如注释中所建议的,当您的类名实现IDisposable时,您可以执行以下操作之一:
ClassName obj = null;
try{
obj = new ClassName();
//do stuff
}
finally{
if (obj != null) { obj.Dispose(); }
}
或者,使用using语句:
using (var obj = new ClassName())
{
// do stuff
}
obj=null;应该足够了…….如果对象的类实现IDisposable,则可以调用obj.Dispose()。@FarhadJabiyev obj=null在函数范围内定义变量obj时非常无用(因为引用存在于堆栈上)。您正在尝试清理资源吗?因为它是一个局部变量,所以您实际上不必执行
obj=null代码>。如果它没有被引用到其他任何地方,垃圾收集器将处理它。正如vesan所说,让垃圾收集器来处理它。除非您的类实现了IDisposable
,否则不要担心它会显示他的代码,但是重写为使用使用可能会有所帮助。我不是投反对票的人,但我必须问一下……您能证明为什么需要调用GC.SuppressFinalize(this);?“C#”不能进行任何清理;NET框架和垃圾收集器都可以。“C#”只是一种编程语言。