gpt4 book ai didi

c# - 当对象超出 c# 的范围时?

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

明确定义范围的方法。

static void Main(string[] args)
{
Class1 c1 = new Class1(1);

{
Class1 c2 = new Class1(2);

{
Class1 c3 = new Class1(3);
}

//this is not collecting object c3 which is out of scope here
GC.Collect();
}

//this is not collecting object c2 which is out of scope here
GC.Collect();
Console.ReadKey();
}

Class1 定义:

class Class1
{
int x;
public Class1(int a)
{
x = a;
}
~Class1()
{
Console.WriteLine(x + "object destroy");
}
}

我写了这段代码。但是 GC.Collect() 方法不收集超出范围的对象。

最佳答案

GC.Collect() 并不是真的要用于资源的确定性回收。 (这就是你真实代码中的终结器所做的,对吧?)

如果您要处理非托管资源,强烈建议您使用 Microsoft.Win32.SafeHandles 中的类之一。

如果您想要确定性地释放资源,您应该实现IDisposable,并在您使用完该对象后调用Dispose()。这样做的惯用方法是:

using (var someResource = new Class1(1)) 
{
// work with the `Class1` object
}

在功能上等同于

{
var someResource = new Class1(1);
try
{
// work with the `Class1` object
}
finally
{
someResource.Dispose();
}
}

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

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