using System; using System.IO; using System.Text; public class UsingMyField : StringWriter { private StringBuilder my_precious; public UsingMyField () { my_precious = new StringBuilder (); } public static void Main (String[] args) { Console.WriteLine ("Okay, so I'm going to write the following line to myself.\nqqq (q goons)\nOh, did I forget to mention? I'm a StringWriter.\nWell, sort of anyway. I have my own private field, and I overrode\nGetStringBuilder to answer my field instead. So, I should be able to get\neverything I've written by accessing my own field!\nOkay, here goes:"); UsingMyField what = new UsingMyField (); what.Write ("qqq (q goons)\n"); what.Flush (); Console.WriteLine ("Okay, writing done! Let's see what's in my StringBuilder:"); Console.WriteLine (what.GetStringBuilder ().ToString ()); Console.WriteLine ("Erm, okay. Fortunately, I defined another method that calls\nbase.GetStringBuilder; let's try that:"); Console.WriteLine (what.GetSuperStringBuilder ().ToString ()); Console.WriteLine ("Whew! Thought I lost all that data.\nI hope you enjoyed this experiment."); } public override StringBuilder GetStringBuilder () { return my_precious; } public StringBuilder GetSuperStringBuilder () { return base.GetStringBuilder (); } }