2010-12-16 9 views
2

私はたくさんのたくさんのプロパティを持つクラスを持っています。 私のプログラムでは、大量にログを取らなければなりません。多くの場合、私は手動に私のカスタムオブジェクトのToString()を提供

string log = "Current state of object:" + "Property1" + myObj.Property1 + ... 
  1. よう ビルドログの文字列は、私はちょうどどのような場合は、オーバーライドToString考えて、私は必要なものは何でものロギングを提供しています。それはgoogの練習と見なされますか?
  2. フォーマッタ制御文字列を提供するにはどうすればよいですか?私は私のToStringメソッドは、2つのモード 1で動作するようにしたいと言うだけで、関連するプロパティが出力にあるwheereすべてのプロパティの完全なouputを、別のライトバージョンです

MyObj.ToString(「フル」)とMyObj.ToString(」のような何か)「基本

+3

デバッグのために常に.ToStringをオーバーライドします。私はそれに問題があるとは思わない。 – RPM1984

+0

も同上。 ToString()をオーバーライドすると、VSでもっと良い "ウォッチ"ウィンドウが表示されます。 – hhravn

+1

これをOPとして明示的にコメントとして投稿する*デバッガには言及せず、ログファイルなど:デバッガ(腕時計)についてのみ心配している場合は、DebuggerDisplayAttribute(http:// msdn.microsoft.com/en-us/library/system.diagnostics.debuggerdisplayattribute.aspx)。さらに、ToString()の操作が複雑すぎると、デバッガがかなり頻繁に評価されるか、または例外が発生し、何も表示されないため、デバッガの速度が低下する可能性があります。 –

答えて

4

オーバーライドToStringは、良い情報を提供している限り、実際には良い練習です。

ToStringの異なるタイプを持つことは可能ですが、ToStringをオーバーライドすることはありませんが、オーバーロードを提供します(使用するクラスについて知っておく必要があります)。

オーバーライドとしてlightweightバージョンを実装し、フルセットのプロパティに対してVerboseToString関数を作成します。

このようなオブジェクトが多数ある場合は、VerboseToStringメソッドを使用してIVerboseStringインターフェイスを作成し、オブジェクトに実装することができます。このようにして、ロギングでインターフェイス参照を使用するだけです。

+0

右のように、互換性が必要な場合はToStringをオーバーライドするか、「機能」を使用する場合はMyOwnOutput()を指定してください。 –

+0

@Captain Comic - 両方を実行できます:) – Oded

1
  1. あなたは、もちろん、ToStringメソッドをパラメータ可能性が優れた実践
  2. ませんが、たとえば、それはもはやオブジェクトから文字列への暗黙的な変換を意味しますので、あなたが書くことができません、 string x = myObject; ToStringを明示的に呼び出す必要があります。
1

ToStringをオーバーライドしていますが、Enumをパラメータとし、内部で必要な処理を行うメソッドを作成しないのはなぜですか?

+0

enumとは何が関係していますか? – RPM1984

+1

@ RPM1984 - 私が推測するブードゥー魔法の定数より優れていますか?しかし、私はここでもそれが好きではありません。 IVerboseインターフェイスの再利用が増えました。 – annakata

+1

@ RPM1984:OPは、2つの操作(フルとベーシック)が必要であると述べました。私はToStringをオーバーライドしませんが、toStringをオーバーライドしてそのEnumをパラメータとして追加することはできないので、このための新しいメソッドを記述します。 – Pabuc

1

私はそれに付随する特別な問題は考えられませんし、私は単体テストやトレースなどの情報を吐き出してくれたことに感謝しますが、冗長で簡潔な出力あなたが入力引数bool verboseを取ったか、またはToStringVerbose()メソッドを明示的に作成したのであれば、私はここでそれを好むでしょう。オーバーライドされたメソッドの実装の一環としてbase.ToString()を使用するのもよい練習です。

関連する問題