繁体   English   中英

“使用”块与“动态”一起

[英]“using” block together with “dynamic”

如果我写

using (dynamic d = getSomeD ()) {
   // ...
}

这是否意味着在离开using块时会调用d.Dispose ()

d不实现IDisposable时会发生什么?

这是否意味着在离开using块时会调用d.Dispose()?

是。 如果该类型实现IDisposable则将调用Dispose

当d不实现IDisposable时会发生什么?

你会得到一个例外

System.Core.dll中发生了类型为“ Microsoft.CSharp.RuntimeBinder.RuntimeBinderException”的未处理异常
无法将类型“ YourType”隐式转换为“ System.IDisposable”。 存在显式转换(您是否缺少演员表?)

您可以通过上一堂课来尝试一下:

class MyDisposable : IDisposable //Remove IDisposable to see the exception
{
    public void Dispose()
    {
        Console.WriteLine("Dispose called");
    }
}

接着:

using (dynamic d = new MyDisposable())
{

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM