Files and Streams
Using Disposal
Limit a disposable object to a clear scope.
disposal
A `using` block disposes the resource when the block ends.
Using Disposal
UsingDisposal.cs
Replay: real traced execution (multi-file project)
using System;
using System.IO;
class Program
{
static void Main()
{
string status = "open";
string saved;
using (StringWriter writer = new StringWriter())
{
writer.Write("status=");
writer.Write(status);
saved = writer.ToString();
}
Console.WriteLine(saved);
Console.WriteLine("writer scope ended");
}
}
using System;
using System.IO;
class Program
{
static void Main()
{
string status = "draft";
string saved;
using (StringWriter writer = new StringWriter())
{
writer.Write("status=");
writer.Write(status);
saved = writer.ToString();
}
Console.WriteLine(saved);
Console.WriteLine("writer scope ended");
}
}
using System;
using System.IO;
class Program
{
static void Main()
{
string status = "final";
string saved;
using (StringWriter writer = new StringWriter())
{
writer.Write("status=");
writer.Write(status);
saved = writer.ToString();
}
Console.WriteLine(saved);
Console.WriteLine("writer scope ended");
}
}
status ← open, writer ← status=, saved ← status=open
5{6 static void Main()7 {8 string status→ open = "open"; //@status="draft", "final"9 string saved;1011 using (StringWriter writer = new StringWriter())12 {13 writer→ status=.Write("status=");14 writer→ status=open.Write(statusopen);15 saved→ status=open = writerstatus=open.ToString();16 }1718 Console.WriteLine(savedstatus=open);19 Console.WriteLine("writer scope ended");20 }outputstatus=open writer scope ended
status ← draft, writer ← status=, saved ← status=draft
5{6 static void Main()7 {8 string status→ draft = "draft";9 string saved;1011 using (StringWriter writer = new StringWriter())12 {13 writer→ status=.Write("status=");14 writer→ status=draft.Write(statusdraft);15 saved→ status=draft = writerstatus=draft.ToString();16 }1718 Console.WriteLine(savedstatus=draft);19 Console.WriteLine("writer scope ended");20 }outputstatus=draft writer scope ended
status ← final, writer ← status=, saved ← status=final
5{6 static void Main()7 {8 string status→ final = "final";9 string saved;1011 using (StringWriter writer = new StringWriter())12 {13 writer→ status=.Write("status=");14 writer→ status=final.Write(statusfinal);15 saved→ status=final = writerstatus=final.ToString();16 }1718 Console.WriteLine(savedstatus=final);19 Console.WriteLine("writer scope ended");20 }outputstatus=final writer scope ended