我有一个有很多很多属性的课程。 在我的程序中,我必须重重记录。我经常需要手动 构建日志字符串,如
string log = "Current state of object:" + "Property1" + myObj.Property1 + ...
ToString
并提供我需要的任何记录。它被认为是goog练习? 像MyObj.ToString(“full”)和MyObj.ToString(“basic”)
答案 0 :(得分:4)
覆盖ToString
确实是一种很好的做法,只要您提供良好的信息。
至于具有不同类型的ToString
- 这是可能的,但是你不会覆盖ToString
,而是提供重载(任何使用类都需要了解)。
我会将lightweight
版本实现为覆盖,并为整套属性创建VerboseToString
函数。
如果您有许多此类对象,则可以使用IVerboseString
方法创建VerboseToString
接口,并在对象中实现它。这样,您只需在日志记录中使用接口引用即可。
答案 1 :(得分:1)
string x = myObject
;你必须明确地调用ToString。答案 2 :(得分:1)
为什么要覆盖ToString但不创建一个以Enum作为参数的方法并在你的内部做你想做的事情?
答案 3 :(得分:1)
我无法想到与之相关的任何特定问题,而我自己也经常感谢它在单元测试或跟踪等中吐出信息,但我会对您的实现提出冗长而简洁的输出问题 - 不要使用voodoo字符串或任何类型的任意输入 - 我更喜欢它在id中你要么输入参数bool verbose
,要么你明确地创建了一个ToStringVerbose()
方法。对于您的重写方法,使用base.ToString()
作为其实现的一部分,这也是恕我直言的好习惯。