Finalize()中的C#覆盖

Joh*_*ker 3 c# overriding finalize

protected override void Finalize()
        {
            try
            {
                this.FtcpSock.Close();
                this.FudpSock6800.Close();
                this.FudpSock6801.Close();
                this.FudpSock6802.Close();
                this.FudpSock6803.Close();
                this.FudpSock6804.Close();
                this.FudpSock6806.Close();
            }
            finally
            {
                this.Finalize();
            }
        }
Run Code Online (Sandbox Code Playgroud)

我收到此错误信息:

Error 1 Do not override object.Finalize. Instead, provide a destructor.

顺便说一句,这是由第三方公司遵守的原始代码.
如何解决这个问题呢?如何用覆盖结束?

Jar*_*Par 5

正如消息所述,您不应该Finalize直接覆盖,而是提供析构函数.忽略这一点虽然代码有另一个致命的问题

protected override void Finalize() {
  try { 
    ...
  } finally { 
    this.Finalize();
  }
}
Run Code Online (Sandbox Code Playgroud)

此代码最终将导致代码中的堆栈溢出.它以递归方式在finally块中调用自身,因此只会循环,直到用完堆栈空间.代码可能意味着使用以下代码

base.Finalize();
Run Code Online (Sandbox Code Playgroud)

这将链接到Finalize基类型的实现