gpt4 book ai didi

c# - Unity 中的递归和 Dispose 模式实现

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

我的类继承自UnityContainer(来自Unity 2.0),这里是源代码:

    public class UnityManager : UnityContainer
{

private UnityManager()
{
_context = new MyDataClassesDataContext();
// ...
}


protected override void Dispose(bool disposing)
{
if ( disposing )
{
_context.Dispose();
}

base.Dispose(disposing);
}

private readonly CMCoreDataClassesDataContext _context;
}

当为 UnityManager 类的实例调用 Dispose 方法时,它会进入递归...为什么?据我所知 base.Dispose 应该只调用基类的 Dispose 方法......不是吗?谁回调UnityManager的Dispose(bool)?如何防止这种情况?

谢谢。

最佳答案

多亏了 Nicole,我找到了一个理由……谢谢。但是在这种情况下如何处理容器呢?如果为 UnityManager 的实例调用“Dispose”,base.Dispose(true) 将再次调用 Dispose.... 并再次(递归将开始)。

为了解决这个问题,我添加了额外的私有(private)变量 bool _bDisposed:

    protected override void Dispose(bool disposing)
{
if (_bDisposed)
return;

if ( disposing )
{
_context.Dispose();
}
_bDisposed = true;

base.Dispose(disposing);
}

private bool _bDisposed;

这是 Bill Wagner 在“Effective C#”中建议的“Dispose”模式实现(如果我没记错的话)

关于c# - Unity 中的递归和 Dispose 模式实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2959485/

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