gpt4 book ai didi

c# - 在每个函数中使用语句 -> 通过适当的清理转换为类字段?

转载 作者:太空狗 更新时间:2023-10-29 20:59:28 26 4
gpt4 key购买 nike

基本上我有几个函数是这样的:

class MyClass
{
void foo()
{
using (SomeHelper helper = CreateHelper())
{
// Do some stuff with the helper
}
}

void bar()
{
using (SomeHelper helper = CreateHelper())
{
// Do some stuff with the helper
}
}
}

假设我可以在每个函数中使用相同的资源而不是不同的[实例],在清理方面是否可以实践?:

class MyClass
{
SomeHelper helper = CreateHelper();

// ...foo and bar that now just use the class helper....

~MyClass()
{
helper.Dispose();
}
}

最佳答案

不, 添加析构函数 (Finalizer)。

您可以重用该资源,但您的类必须实现 IDisposable

sealed class MyClass : IDisposable
{
SomeHelper helper = CreateHelper();

// ...foo and bar that now just use the class helper....

//~MyClass()
public void Dispose()
{
helper.Dispose();
}
}

现在您必须在 using block 中使用 MyClass 实例。它本身已成为一个托管资源

析构函数是没有用的,每当收集 MyClass 实例时,关联的帮助程序对象也将在同一个集合中。但是拥有一个析构函数仍然会产生相当大的开销。

standard pattern对于 IDisposable 使用 virtual void Dispose(bool disposing) 方法,但是在制作类 sealed 时,您可以使用上面的简约实现。

关于c# - 在每个函数中使用语句 -> 通过适当的清理转换为类字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8231661/

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