gpt4 book ai didi

c# - 对象超出范围

转载 作者:行者123 更新时间:2023-11-30 13:48:23 24 4
gpt4 key购买 nike

我们有如下代码来修复 CA2000:在丢失范围之前处置对象 (http://msdn.microsoft.com/en-us/library/ms182289.aspx)。当 tbl 被赋值为 null 时,它引用的对象是否会被垃圾回收?

    private DataTable BuildRequestDataTable(Factory tableFactory)
{
DataTable tbl = null;
DataTable requestTable = null;
try
{
tbl = tableFactory.CreateTable();
requestTable = tbl;
tbl = null;
}
finally
{
if (tbl != null)
{
tbl.Dispose();
}
}

return requestTable;
}

最佳答案

When the tbl is assigned null, will the object that it referenced garbage collected ?

没有。或者至少,不是立即。对象不是那样进行引用计数的。

目前还不是很清楚您为什么要处理所有这些变量 - 我看不出您曾经是如何处理掉任何东西的。 CreateTable 调用成功,在这种情况下,以下两个语句将成功并且不会释放任何内容,或者 CreateTable 调用抛出,在这种情况下,tbl 仍然为 null,并且不会处理任何内容。

你的代码基本上等同于:

private DataTable BuildRequestDataTable(Factory tableFactory)
{
return tableFactory.CreateTable();
}

此时您可能会收到一条警告,提示您没有处理 DataTable,但这是故意的 - 调用者可能会负责处理它。

当然,目前尚不清楚代码本身是否真的提供了很多好处——它并不容易使用:

using (var table = BuildRequestDataTable(tableFactory))

using (var table = tableFactory.CreateTable())

...除非您打算在方法中添加更多逻辑。

关于c# - 对象超出范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12735070/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com