[英]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);
}
它會影響自動處置能力嗎?
不,它不會影響自動處置能力。 無論 object 是使用new X(...)
語法創建還是從其他方法返回, using
塊都會在塊末尾處對包裝的 object 調用Dispose
。
兩個代碼片段的行為相同,您只是在擺弄一些 object 引用,但這不會改變這種情況下 using 語句的 scope 。
編譯器會將你的第一個代碼變成
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 塊將在兩種變體中以完全相同的方式執行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.