ToString()
覆蓋約定是什麼?有問題的課程既有Name
屬性,也有Id
。ToString約定
回答
您可以參考以下鏈接
Overriding System.Object.ToString() and Implementing IFormattable
Demystifying C# Programming's ToString Method
How To: Override the ToString Method
我的經驗法則
1.它應該是同步與Equals和GetHashCode
2.它應該與Parse方法同步(如果我正在提供)
3。如果需要自定義格式,請使用IFormattable
我不知道任何約定。我通常會在文本上打印出合適的內容。 Id
可能並不適合您的情況。
我的經驗法則是,ToString
應該顯示兩個對象是否爲Equals
。
據我所知,ToString()
的約定與對象上的其他2個可重寫方法的約定固有地聯繫在一起 - GetHashCode
和Equals
。
也就是說,當Equals
返回true時,應該由GetHashCode
生成相同的散列碼。爲了補充一點,我想說當Equals
返回true時,ToString
應該返回相同的字符串。
做你需要做的。沒有慣例,因爲當覆蓋.Equals()
和.GetHashCode()
之類的東西時是有的。
如果要在執行期間中斷時影響調試器中顯示的內容,請不要使用ToString()
- 使用DebuggerDisplayAttribute
。
有一些指導這裏:
http://msdn.microsoft.com/en-us/library/ms173154(v=vs.80).aspx
我認爲它歸結到很多類是打算如何使用,雖然。例如,如果以面向方式顯示,則返回信息需要與可能最終看到它的用戶相關。
我相信ToString()
實施應該記住三兩件事:
- 字符串表示應該是人類,例如可讀您可以將其用於日誌/控制檯輸出或例如在DebuggerDisplay屬性中。
- 如果您班上有任何
Parse
方法,它應該能夠解析ToString
調用的結果。此外myInstance.Equals(MyClass.Parse(myInstance.ToString()))
應該評估爲true
- 如果兩個實例相等,它們的字符串表示也應該相等。
對於整個應用程序中的所有ToString方法,您應該使用統一且可重用的解決方案。手工編寫一般的ToStringHelper或使用外部庫,如stateprinter項目https://github.com/kbilsted/StatePrinter項目
- 1. Int自定義ToString
- 2. 自定義ExpressionTree ToString
- 3. 100.toString vs 100 ['toString']
- 4. ToString(「0」)與ToString(CultureInfo.InvariantCulture)
- 5. 約定
- 6. QDomDocument toString
- 7. 。的ToString()
- 8. 逆.ToString()
- 9. 的toString
- 10. toString,Nullpointerexception
- 11. LinkedList toString()
- 12. Android + toString
- 13. Clojure中-toString與.toString之間的區別
- 14. 將toString與toString進行比較
- 15. ToString(「N2」)和ToString(「0.00」)之間的區別
- 16. (1)的ToString()和1.toString()內的Javascript
- 17. 活動約定
- 18. 約定與Ember
- 19. ASP.NET MVC約定
- 20. 命名約定
- 21. android:largeHeap =「true」約定?
- 22. 命名約定
- 23. Rails約定
- 24. Java string.split()約定
- 25. 聯動約定
- 26. Bootstrap列約定
- 27. NET Remoting約定
- 28. MySQL約定?
- 29. Symfony2約定
- 30. R write.table約定