在使用块中重新实例化时释放行为

本文关键字:实例化 释放 | 更新日期: 2023-09-27 18:35:17

我想知道如果我需要在自己的 using() 标签中重新实例化变量,行为是什么(如果定义了)?

我有一个实际的用例,使用 SharpDX,我想在渲染循环(用于每一帧)之外声明变量,理想情况下,我会将其包装为using(thevariable){MainLoop{}};但是,如果发生某些事情(用户调整大小),则可能需要释放和重新初始化该变量。我在示例中看到它被初始化为 null,然后在需要时在循环中重新初始化,重新释放,然后在循环后再次处置,这看起来比使用 well 使用 using 语句要糟糕得多,所以我想知道这样的代码的行为是什么:

void Main()
{
    using(var MyDisposable = new MyDisposable())
    {
        If(SomeCondition)
        {
             MyDisposable.Dispose() // Do i need to call this? Or is it auto called thanks to using when leaving the block? What will using call dispose on, the object that MyDisposable refers to, or the one it refered to back when i called the using statement?
             MyDisposable = new MyDisposable(); // Is this going to be managed by the using block? Is this even valid?
        }
    }
}

我也不确定行为是否随着时间的推移而改变,我假设没有,但如果有,我对 .net 4.5 答案感兴趣

在使用块中重新实例化时释放行为

我想你会发现这会导致编译器错误。

无法分配给"我的一次性",因为它是"使用变量"

所以,你的问题的答案是:在这种情况下什么都不会发生。您的代码无法编译。