gpt4 book ai didi

c# - 使用一次性模式清理 IDispose 成员类

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

部分一次性模式包括以下方法。

protected virtual void Dispose(bool disposing)
{
if (!disposed)
{
if (disposing)
{
// TODO: dispose managed state (managed objects).
}

// TODO: free unmanaged resources (unmanaged objects) and override a finalizer below.
// TODO: set large fields to null.
disposed = true;
}
}

此方法对清理托管和非托管资源有不同的处理方式。但是,如果我想清理实现了 IDisposable 的类成员怎么办?

通常,我不知道该成员是清理托管资源还是非托管资源。因此,如果我希望我的 Dispose 方法清除实现了 IDisposable 的类成员,我是否会在托管的该成员上调用 Dispose()还是上面代码中的非托管部分?

最佳答案

您应该在托管部分调用 Dispose(即,仅当 disposing 为真时)。

指南的一部分在 Dispose Pattern根据框架设计指南是:

The Boolean parameter disposing indicates whether the method was invoked from the IDisposable.Dispose implementation or from the finalizer. The Dispose(bool) implementation should check the parameter before accessing other reference objects [...]. Such objects should only be accessed when the method is called from the IDisposable.Dispose implementation (when the disposing parameter is equal to true). If the method is invoked from the finalizer (disposing is false), other objects should not be accessed. The reason is that objects are finalized in an unpredictable order and so they, or any of their dependencies, might already have been finalized.

另一个有用的资源是 Implementing a Dispose Method

关于c# - 使用一次性模式清理 IDispose 成员类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31910112/

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