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();
}
}
我收到此错误消息:
Error 1 Do not override object.Finalize. Instead, provide a destructor.
答案 0 :(得分:5)
如消息所述,您不应直接覆盖Finalize
,而应提供析构函数。忽略这一点虽然代码还有一个致命的问题
protected override void Finalize() {
try {
...
} finally {
this.Finalize();
}
}
此代码最终会导致代码中的堆栈溢出。它在finally
块中以递归方式调用自身,因此只会循环直到用完堆栈空间。代码可能意味着使用以下代码
base.Finalize();
这将链接到基类型
上Finalize
的实现
答案 1 :(得分:3)
如果您可以编辑代码,则可以将代码移动到析构函数中。对于名为“Form1”的表单,析构函数看起来像:
~Form1()
{
this.FtcpSock.Close();
this.FudpSock6800.Close();
this.FudpSock6801.Close();
this.FudpSock6802.Close();
this.FudpSock6803.Close();
this.FudpSock6804.Close();
this.FudpSock6806.Close();
}