C# 使用,它将在链式 instantiation/method 调用中处理多少变量
C# using, how many variables it will dispose in a chained instantiation/method calls
快速搜索后没有出现类似问题,因此提出这个问题。
只是想知道将调用哪些处理方法以及调用顺序是什么?
using(var bar = new FooDisposable().Bar())
{
//Will this using call both (IFooDisposable.Dispose and IBarDisposable.Dispose) the dispose methods?
}
public class FooDisposable : IFooDisposable
{
public IBarDisposable Bar()
{
return new ImplOfIBarDisposable();
}
}
public interface IFooDisposable : IDisposable
{
IBarDisposable Bar();
}
public interface IBarDisposable : IDisposable
{
}
只有 IBarDisposable
会调用其 Dispose()
。
This MSDN article 很有帮助。
using (Font font1 = new Font("Arial", 10.0f))
{
byte charset = font1.GdiCharSet;
}
变成
{
Font font1 = new Font("Arial", 10.0f);
try
{
byte charset = font1.GdiCharSet;
}
finally
{
if (font1 != null)
((IDisposable)font1).Dispose();
}
}
快速搜索后没有出现类似问题,因此提出这个问题。 只是想知道将调用哪些处理方法以及调用顺序是什么?
using(var bar = new FooDisposable().Bar())
{
//Will this using call both (IFooDisposable.Dispose and IBarDisposable.Dispose) the dispose methods?
}
public class FooDisposable : IFooDisposable
{
public IBarDisposable Bar()
{
return new ImplOfIBarDisposable();
}
}
public interface IFooDisposable : IDisposable
{
IBarDisposable Bar();
}
public interface IBarDisposable : IDisposable
{
}
只有 IBarDisposable
会调用其 Dispose()
。
This MSDN article 很有帮助。
using (Font font1 = new Font("Arial", 10.0f))
{
byte charset = font1.GdiCharSet;
}
变成
{
Font font1 = new Font("Arial", 10.0f);
try
{
byte charset = font1.GdiCharSet;
}
finally
{
if (font1 != null)
((IDisposable)font1).Dispose();
}
}