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#”只是一种编程语言。