如果 return 将在里面,将使用销毁数据
Will using destroy data if return will be inside
在处理我的项目时,我想知道,如果 return 将在 using 中,是否会使用自动销毁数据。
示例代码块:
using(ManagedObject obj = new ManagedObject())
{
int usualNumber = 0;
// some magic stuff
...
// magic stuff ends
return usualNumber; // return goes inside of 'using' brackets
}
问题来了,我们实现了 IDisposable 的 ManagedObject 会被 'using' 语句处理掉吗?
using
是一个语法糖,它需要包含一个实现IDisposable
接口的对象,当你离开using
作用域时.net会调用IDisposable.Dispose
方法自动。
这是一个示例 c# online
当程序离开Test
方法时。 .net
将自动调用 IDisposable.Dispose
方法
using
语句可以看作是try
和finally
的组合。
您的代码等同于:
ManagedObject obj = new ManagedObject();
try
{
int usualNumber = 0;
// some magic stuff
...
// magic stuff ends
return usualNumber;
}
finally
{
if (obj != null)
((IDisposable)obj ).Dispose();
}
我想,您的问题的答案可以通过这个代码示例看到。
是的,会调用IDisposable
接口实现的Dispose()
函数
class Program
{
static void Main(string[] args)
{
new Test().TestIt();
Console.Read();
}
}
class Test
{
public int TestIt()
{
using (ManagedObject obj = new ManagedObject())
{
int usualNumber = 0;
return usualNumber;
}
}
}
internal class ManagedObject : IDisposable
{
public void Dispose()
{
Console.WriteLine("Disposed");
}
}
是的,即使您从 using 块中 return
,它仍然会在 obj
上调用 Dispose
。
请注意 return 使用 usualNumber
完全没问题,但是如果您要 return obj
,那可能是个问题,因为您会 returning 一个 "disposed" 对象。
(从技术上讲,对象可以在调用 Dispose 后使用。例如,您可以实现一个不执行任何操作的 Dispose。但是通常,大多数 Dispose 实现会将对象放在一个不可用状态)。
在处理我的项目时,我想知道,如果 return 将在 using 中,是否会使用自动销毁数据。
示例代码块:
using(ManagedObject obj = new ManagedObject())
{
int usualNumber = 0;
// some magic stuff
...
// magic stuff ends
return usualNumber; // return goes inside of 'using' brackets
}
问题来了,我们实现了 IDisposable 的 ManagedObject 会被 'using' 语句处理掉吗?
using
是一个语法糖,它需要包含一个实现IDisposable
接口的对象,当你离开using
作用域时.net会调用IDisposable.Dispose
方法自动。
这是一个示例 c# online
当程序离开Test
方法时。 .net
将自动调用 IDisposable.Dispose
方法
using
语句可以看作是try
和finally
的组合。
您的代码等同于:
ManagedObject obj = new ManagedObject();
try
{
int usualNumber = 0;
// some magic stuff
...
// magic stuff ends
return usualNumber;
}
finally
{
if (obj != null)
((IDisposable)obj ).Dispose();
}
我想,您的问题的答案可以通过这个代码示例看到。
是的,会调用IDisposable
接口实现的Dispose()
函数
class Program
{
static void Main(string[] args)
{
new Test().TestIt();
Console.Read();
}
}
class Test
{
public int TestIt()
{
using (ManagedObject obj = new ManagedObject())
{
int usualNumber = 0;
return usualNumber;
}
}
}
internal class ManagedObject : IDisposable
{
public void Dispose()
{
Console.WriteLine("Disposed");
}
}
是的,即使您从 using 块中 return
,它仍然会在 obj
上调用 Dispose
。
请注意 return 使用 usualNumber
完全没问题,但是如果您要 return obj
,那可能是个问题,因为您会 returning 一个 "disposed" 对象。
(从技术上讲,对象可以在调用 Dispose 后使用。例如,您可以实现一个不执行任何操作的 Dispose。但是通常,大多数 Dispose 实现会将对象放在一个不可用状态)。