我们举个例子:
using (var someObject = new SomeObject())
{
var someOtherObject = new SomeOtherObject();
someOtherObject.someMethod();
}
Run Code Online (Sandbox Code Playgroud)
SomeOtherObject还实现了IDisposable.当SomeObject被处置时,SomeOtherObject也会被处理掉吗?SomeOtherObject会发生什么?(在SomeObject的Dispose方法中没有实现处理SomeOtherObject)
mun*_*sor 11
不会.只会处理using子句中的字段.在你的情况下只有someObject.
基本上代码被翻译成了
var someObject = null;
try
{
someObject = new SomeObject()
var someOtherObject = new SomeOtherObject();
someOtherObject.someMethod();
}
finally
{
if (someObject != null )
someObject.Dispose()
}
Run Code Online (Sandbox Code Playgroud)
不,SomeOtherObject会不会被处理完毕.
您的代码由编译器重构,如下所示:
var someObject = new SomeObject();
try
{
var someOtherObject = new SomeOtherObject();
someOtherObject.someMethod();
}
finally
{
if (someObject != null)
someObject.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
不会处理someOtherObject.
你的代码会像这样翻译:
var someObject = new SomeObject();
try
{
var someOtherObject = new SomeOtherObject();
someOtherObject.someMethod();
}
finally
{
((IDisposable)someObject).Dispose();
}
Run Code Online (Sandbox Code Playgroud)
因此,不会对任何新创建的对象执行额外调用.
| 归档时间: |
|
| 查看次数: |
289 次 |
| 最近记录: |