使用块调用内部方法
Calling a method inside using block
我有一个 class SomeDisposable
,我正在使用它来使用像这样的块
using(var someDisposable = new SomeDisposable(1))
{
}
我可以改成类似的东西吗
using (var someDisposable = Get(1))
{
}
public SomeDisposable Get(int x)
{
return new SomeDisposable(x);
}
会不会影响自动处理能力?
不,它不会影响自动处理能力。 using
块将在块末尾的包装对象上调用 Dispose
,无论该对象是使用 new X(...)
语法创建的还是从其他方法返回的。
两个代码片段的行为相同,您只是在摆弄一些对象引用,但这不会改变 using 语句在这种情况下的范围。
编译器会将你的第一段代码变成
SomeDisposable someDisposable = new SomeDisposable(1);
try
{
}
finally
{
if (someDisposable != null)
{
((IDisposable)someDisposable).Dispose();
}
}
它将第二个代码变成
SomeDisposable someDisposable2 = Get(1);
try
{
}
finally
{
if (someDisposable2 != null)
{
((IDisposable)someDisposable2).Dispose();
}
}
public SomeDisposable Get(int x)
{
return new SomeDisposable(x);
}
(Source)
如您所见,这没有什么区别。 finally 块将在两种变体中以完全相同的方式执行。
我有一个 class SomeDisposable
,我正在使用它来使用像这样的块
using(var someDisposable = new SomeDisposable(1))
{
}
我可以改成类似的东西吗
using (var someDisposable = Get(1))
{
}
public SomeDisposable Get(int x)
{
return new SomeDisposable(x);
}
会不会影响自动处理能力?
不,它不会影响自动处理能力。 using
块将在块末尾的包装对象上调用 Dispose
,无论该对象是使用 new X(...)
语法创建的还是从其他方法返回的。
两个代码片段的行为相同,您只是在摆弄一些对象引用,但这不会改变 using 语句在这种情况下的范围。
编译器会将你的第一段代码变成
SomeDisposable someDisposable = new SomeDisposable(1);
try
{
}
finally
{
if (someDisposable != null)
{
((IDisposable)someDisposable).Dispose();
}
}
它将第二个代码变成
SomeDisposable someDisposable2 = Get(1);
try
{
}
finally
{
if (someDisposable2 != null)
{
((IDisposable)someDisposable2).Dispose();
}
}
public SomeDisposable Get(int x)
{
return new SomeDisposable(x);
}
(Source) 如您所见,这没有什么区别。 finally 块将在两种变体中以完全相同的方式执行。