c# - using 语句是否保留对它接收到的对象的引用?
问题描述
当使用这样的“使用”语句时:
using (Global.Instance.BusyLifeTrackerStack.GetNewLifeTracker())
{
...
代替
using (var lt = Global.Instance.BusyLifeTrackerStack.GetNewLifeTracker())
{
...
“使用”语句是否会保留对返回对象的引用,以确保不会过早地对其进行垃圾收集?...如果没有为它声明显式变量(第一个示例代码)?
第二个示例代码显然很好,但第一个?
任何文档和/或对信息的引用将不胜感激。
解决方案
是的,保留了一个真实的引用,以便Dispose
可以在最后调用该方法。当您不需要显式访问using
块内的一次性对象时,此模式通常用于在处置中执行某种“副作用”。例如,在 Razor 中using(Html.BeginForm){...}
允许处理返回的对象以</form>
在末尾输出标签。
C# 中的一个简单示例是:
public class MessageGenerator : IDisposable
{
public MessageGenerator()
{
Console.WriteLine("To whom it may concern,");
}
public void Dispose()
{
Console.WriteLine("Thanks and goodbye.");
}
}
和这样的用法:
using (new MessageGenerator())
{
Console.WriteLine("Please give me lots of reputation.");
}
会给出这样的输出:
敬启者,
请给我很多声望
谢谢,再见。