如果我写
using (dynamic d = getSomeD ()) {
// ...
}
是否意味着在留下d.Dispose ()
块时调用using
?
d
未实现IDisposable
时会发生什么?
答案 0 :(得分:3)
是否意味着当使用块时调用d.Dispose() 左?
是。如果类型实现IDisposable
,则将调用Dispose
。
当d没有实现IDisposable时会发生什么?
您将获得例外
未处理的类型异常 发生了'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' System.Core.dll
无法隐式将“YourType”类型转换为“System.IDisposable”。一个 存在显式转换(您是否错过了演员?)
您可以通过以下类来尝试自己:
class MyDisposable : IDisposable //Remove IDisposable to see the exception
{
public void Dispose()
{
Console.WriteLine("Dispose called");
}
}
然后:
using (dynamic d = new MyDisposable())
{
}