ToString()
オーバーライドの規則は何ですか?問題のクラスには、Name
プロパティと。の両方がありますId
。
7 に答える
あなたがする必要があることをしなさい。.Equals()
andのようなものをオーバーライドする場合のように、それ自体は規則はありません.GetHashCode()
。
実行中に中断したときにデバッガーに表示される内容に影響を与えたい場合は、使用しないでくださいToString()
-を使用してDebuggerDisplayAttribute
ください。
次のリンクを参照できます
System.Object.ToString()をオーバーライドし、IFormattableを実装する
C#プログラミングのToStringメソッドの謎を解き明かす
僕のバカゲ
- EqualsおよびGetHashCodeと同期している必要があります
- 解析メソッドと同期している必要があります(提供している場合)
- カスタムフォーマットが必要な場合は、IFormattableを使用してください
慣習については知りません。私は通常、テキストの文脈で適切と思われるものを印刷します。あなたのId
文脈に適しているかもしれないし、そうでないかもしれません。
私の親指のルールは、ToString
2つのオブジェクトがそうであるかどうかを明らかにする必要があるということですEquals
。
私の知る限り、ToString()
の規則は、オブジェクト上の他の2つのオーバーライド可能なメソッドの規則に本質的にリンクされています-GetHashCode
およびEquals
。
つまりEquals
、trueが返される場合、同じハッシュコードがによって生成される必要がありますGetHashCode
。これに加えて、Equals
trueを返す場合はToString
、同じ文字列を返す必要があります。
の実装では、次のToString()
3つのことに留意する必要があると思います。
- 文字列表現は、人間が読み取れる必要があります。たとえば、ログ/コンソール出力に使用したり、DebuggerDisplay属性で使用したりできます。
- クラスにメソッドがある場合は、呼び出し
Parse
の結果を解析できるはずです。ToString
さらにmyInstance.Equals(MyClass.Parse(myInstance.ToString()))
、次のように評価する必要がありますtrue
- 2つのインスタンスが等しい場合、それらの文字列表現も等しくなければなりません。
ここにいくつかのガイダンスがあります:
http://msdn.microsoft.com/en-us/library/ms173154(v=vs.80).aspx
ただし、クラスの使用目的に大きく影響すると思います。たとえば、表示されている場合、返品は、最終的に表示される可能性のあるユーザーに関連している必要があります。
アプリケーション全体のすべてのToStringメソッドに、統一された再利用可能なソリューションを使用する必要があります。一般的なToStringHelperを手動でコーディングするか、stateprinterプロジェクトhttps://github.com/kbilsted/StatePrinterプロジェクトなどの外部ライブラリを使用します