C#では、ObjectクラスがToString()メソッドを持っているため、全てのオブジェクトがこのメソッドを継承しています。.NetFrameworkで用意されているクラスでは、ToString()をコールする事で有用な情報が帰ってくるのですが、自作のクラスではクラス名が分かる程度で役に立つ情報は有りません。
自前でToString()メソッドをオーバーライドしておくと、開発・デバッグが非常に捗りますが、そのときに注意すべき点が幾つかあります。
ToString() メソッド内で例外を発生させない また、オブジェクトの内部状態に情報がセットされていない場合でも、空文字列やnullを返さないようにする。 ToString()の出力結果に改行文字を含めない 出力された文字列はログファイルに吐き出される場合もあるので、改行が含まれると問題が出る場合がある 返される文字列は、オブジェクトの内部状態を表現したものにする 但し、内部状態の情報が膨大になる場合は要約する事も検討する ※要約したくない場合IFormattableクラスを利用し、結果を出し分けるのも良い パスワード等の、セキュリティ上問題がある情報をオブジェクトが保持している場合、 生データをそのまま出力させない デバッグ目的で使われる事が多いので、人が見て分かりやすい形式で出力する ToString(string, format)メソッドのオーバーロード行う場合は、 実行環境の言語に応じた出力を行う(特に,日付の表記法などに注意) ToString()でしか取得できない情報を作らないようにする これは、クラスの利用者がToString()の戻り値を解析して情報をとろうとするのを防ぐ為 ToString()をコールする事でオブジェクトの内部状態に副作用が起きないようにする 各インスタンスごとに異なる値が返るにすることを検討する |
C#でToStringをオーバーライドする場合は、以下の形式でメソッドの定義を行います
public override string ToString() { ... } |
また、ReShaperというプラグインを使用すると、Alt-Insを押すだけでToString()メソッドを実装してくれます。
オープンソースのプログラム作成や教育目的なら、無償で利用可能です(商用利用は有償です)
ReShaper
関連記事
コメントを残す