SetIn/SetOut/SetErrorの各メソッドを使うと、実行時に標準ストリームを任意のTextReader/Writerへとリダイレクトすることができます。
標準ストリームのリダイレクトを行うと、Console.WriteLineやReadLineなどのメソッドの入出力先は、リダイレクト先として指定されたTextReader/Writerへと変更されます。
次の例ではSetOutメソッドを使って標準出力の出力先を実行時に開いたファイルに変更しています。
Console.In/Out/Errorプロパティから取得できるTextReader/Writerをリダイレクトする前に退避しておき、あとで再度リダイレクト先として設定することにより、一度リダイレクトした標準ストリームの入出力先を元の状態に戻すことができます。
TextReader/Writerクラスは抽象クラスであるため、たいていの場合リダイレクト先の設定には派生クラスであるStreamReader/Writerを使うことになります。 TextReader/WriterおよびStreamReader/Writerの作成や扱い方についてはStreamReaderクラス・StreamWriterクラスを参照してください。
SetIn/SetOut/SetErrorメソッドではStreamをリダイレクト先として直接設定することはできません。 Streamをリダイレクト先として設定したい場合は、そのStreamをベースにしてStreamReader/Writerを作成する必要があります。 具体的な方法についてはStreamReaderクラス・StreamWriterクラス §.任意のStreamからの読み込み・書き込みを参照してください。