Limit a disposable object to a clear scope.

disposal A `using` block disposes the resource when the block ends.

Using Disposal

status
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");
    }
}
  1. 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
  1. 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
  1. 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