書籍『C#プログラミング入門』サポートページ

当ページは、書籍『C#プログラミング入門』(工学社刊 ISBN 978-4-7775-1598-1)のサポートページです。
随時更新していきます。(目次情報はこちら)
※ 当書籍に関するTwitterのつぶやきは、専用ハッシュタグ #BookCsPrimerでお願いします。
■サンプルコードのダウンロード
本書に掲載されたプログラムリストをダウンロードできます。
SampleCode.zip

※ 第9章の「LINQ」の節で利用している、NorthwindObjectsクラスのソースコードも含まれています。
■正誤情報
本書の正誤表については、工学社様のページに掲載されています。そちらをご参照ください。

■本書の書評など
■補足事項
1.プロジェクトにクラスファイルを追加する方法

本書は、C#の言語機能に焦点をあてた解説書のため、Visual Studioの操作については詳しく触れていません。 ここでは、書籍に書けなかったVisual StudioのプロジェクトにC#のクラスファイルを追加する手順を、 第2章の「リスト2-10」を例に取り示します。

  1.  新規プロジェクト(コンソールアプリケーション)を作成します。
    プロジェクト名はPersonSampleとします。



  2.  メニュー[プロジェクト]-[クラスの追加]を選択します。
    (以下の図のように、ソリューションエクスプローラで、プロジェクトを右クリックし、[追加]-[クラス]を選択しても同様です)



     
  3.  新しい項目の追加ダイアログで、名前を「Person.cs」と入力し、[追加]ボタンを押します。



     
  4.  PersonSampleプロジェクトに、Person.csファイルが追加されますので、Person.csファイルにPersonクラスを以下のように実装します。


  5.  ソリューションエクスプローラのProgram.csをマウスでダブルクリックします。Program.csが開き、コードが編集可能になります。



  6.  Program.csを以下のように変更します。

  7.  [ファイル]-[すべてを保存]を選択し、プロジェクトを保存します。

  8.  F5キーを押し、デバッグ実行します。 コンパイルエラーが出ず、Program.csから、Person.csで定義したPersonクラスにアクセスできることを確認します。

2. 具象クラスに依存しないプログラミング (166ページの補足)

P166の「こうすることで」というのが、どういうことなのかについて、もう少し詳しく説明します。

「こうすることで」というのは、
「LoggerFactoryクラスを定義し、Createメソッドで、抽象クラスであるLogWrityerクラスを返すようにすることで」ということを指しています。

つまり、LoggerFactoryクラスを利用して生成したオブジェクトは、ConsoleLogWriterクラスであっても、PlainTextLogWriterクラスであっても、その他の派生クラスであってもすべて、継承元のLogWriterクラスとして扱うこと
ができます。

具体的には、

ではなく、


と書けるということになります。
コード上、ConsoleLogWriterというクラスが現れるのは、LoggerFactoryクラスのの中だけですから、後から、PlainTextLogWriterクラスに変更するのは、一か所変更するだけ済みます。
EventLogWriterクラスに変更するのも同様ですね。

「派生クラスに依存することなく」というのは、そういったことを意味しています。LoggerFactory.Create();を使うことで、具象クラス(派生クラス)クラス名に縛られることなく、プログラムコードが書けますので、後からの変更に強い
プログラムにすることができるのです。

後段の「より実践的にするには」以降について補足しますと、例えば、LoggerFactory クラスを以下のように定義します。


これで、App.configで


のように、ログの出力先を指定できるようにすれば、コードの修正なしに、App.Configファイルを変更するだけで、ログ出力先を変えることが可能になります。

※ このコードをビルドするには、System.Configuration を参照設定に追加する必要があります。


繰り返しになりますが、ConsoleLogWriter 、PlainTextLogWriter、EventLogLogWriter などのクラス名が記述されるのは、LoggerFactory クラス内だけで、実際にログを出力するところでは、これらの抽象クラスである LogWriterクラス
を記述することになります。

ちなみに、リフレクションという機能を使うと、LoggerFactory クラスからもConsoleLogWriter 、PlainTextLogWriter、EventLogLogWriterといった具象クラス名を取り除くことが可能です。その際は、App.configに生成するクラスの情報
を記述することになります。
リフレクションについては、私が発行しているメールマガジンのバックナンバー「リフレクション編」をご覧いただければと思います。
以下のURLからダウンロードできます。
http://gushwell.ifdef.jp/magArchive.html