ログ機能クラスがある。 ログ機能クラスのインスタンスがある(というか、初期化の段階で作る)。 おそらくそのインスタンスは1個でよい(この例では複数あってもおかしくない) 1個でなきゃダメ、なら「シングルトン」なり static class なりを考えればいい。 1個でも2個でも3個以上でも良いなら普通のクラス設計となるだろう。
ログを出す側は「ログ機能クラスのインスタンスに、出力をお願いする」 =最終的にどこに表示されるかは、ログを出す側は気にしなくていい →ログを出す元である Form とログを表示する Form は切り離せた(疎結合になった)ので、 ログ機能クラスは別のプロジェクトでも流用できそうだ→良い設計 ログ表示先(画面とかファイルとか)を切り替えるのはログ機能クラスの担当とすればよい マルチスレッドな時、ログが混ざらないようにするのもログ機能クラスの責務。
では次に考えるべきは 各ログを出す側 Form にログ機能インスタンスをどう渡せばよいか ログ機能インスタンスに出力先をどう渡せばよいか ということになる。
この例では ・ログ機能インスタンスはプログラム開始から終了までずっと存在する必要がある → class Program の所有物として実装してもよさそうだ → (普通 Form1 が close されたらプログラムが終了するので)Form1 の所有物として実装してもよさそうだ
・Form1 が内部で Form2(ログ出力したい人1) Form3(ログ出力したい人2) Form4(ログ出力先) を new するなら →ログ機能インスタンスを new して Form4 を出力先としてプロパティに設定してやればいい → Form2 Form3 のログ機能プロパティにログ機能インスタンスを渡せばよい