我想知道在处理项目时,如果return会在use的内部使用,则会使用自动销毁数据。
示例代码块:
using(ManagedObject obj = new ManagedObject())
{
int usualNumber = 0;
// some magic stuff
...
// magic stuff ends
return usualNumber; // return goes inside of 'using' brackets
}
这是一个问题,实现IDisposable的ManagedObject是否可以通过“使用”语句处理?
答案 0 :(得分:1)
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();
}
我认为,由于此代码示例,可以看到您问题的答案。
答案 1 :(得分:0)
using
是一种语法糖,当您离开IDisposable
范围时,它需要包含一个实现using
接口的对象。.net将自动调用IDisposable.Dispose
方法。
这是一个示例c# online
程序退出Test
方法时。 .net
将自动调用IDisposable.Dispose
方法
答案 2 :(得分:0)
是的,它将调用由Dispose()
接口实现的IDisposable
函数
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");
}
}
答案 3 :(得分:0)
是的,即使您从using块内部return
,它仍然会在Dispose
上调用obj
。
请注意,返回usualNumber
很好,但是如果要返回obj
,则可能会出现问题,因为您将返回“已处置”对象。
(从技术上讲,对象可以在调用Dispose之后使用。例如,您可以实现不执行任何操作的Dispose。但是通常,大多数Dispose实现会将对象置于无法使用的状态)。