C#:ToString()应该如何实现?问题是:由于使用情况,有许多不同的实现。因此,它们太不可靠,无法真正发挥作用。ToString应该如何使用?什么时候应该使用ToString什么时候应该避免?.NETFramework文档说:此方法返回文化敏感的人类可读字符串。有一个类似的问题,但不一样。看起来您对一个小方法期望很高:)据我所知,在许多不同的上下文中使用泛型方法并不是一个好主意,尤其是当它的行为因类而异时。这是我的建议:1.不要让GUI库使用对象的ToString()。而是使用更有意义的属性(几乎所有控件都可以自定义显示除ToString之外的其他属性),例如使用DisplayMember。2.当获取某个对象的一些信息(用于记录或其他用途)时,让某人决定(另一个对象或对象本身)应该提供什么以及应该如何显示。(策略模式可能会派上用场)这是一篇很好的文章,根据您的类条目用法解释重写System.Object.ToString()和实现IFormattable。许多类没有自然的字符串表示(即Form对象)。然后,我会将ToString实现为一种在调试时有用的信息方法(表单文本、大小等)。如果该类旨在向用户提供信息,那么我会将ToString实现为值的默认表示形式。例如,如果您有一个Vector对象,则ToString可能会返回X和Y坐标形式的向量。如果还有其他描述类的方法,我也会在这里添加替代方法。因此,对于Vector,我可能会添加一个方法来返回角度和长度的描述。出于调试目的,您可能还想将DebuggerDisplay特性添加到您的类中。这告诉我们如何在调试器中显示该类,但它不影响字符串表示。您可能还需要考虑使ToString返回的值可解析,以便您可以从字符串表示形式创建对象。就像您可以使用Int32.Parse方法一样。另一个需要考虑的问题是ToString和VisualStudio调试器之间的紧密集成。Watch窗口将ToString的结果显示为表达式的值,因此如果您的方法执行任何延迟加载、有任何副作用或花费很长时间,那么您可能会看到奇怪的行为或调试器可能会挂起。当然,这些品质并不是设计良好的ToString方法的标志,但它们确实存在(例如,通过天真的“从数据库中获取翻译”实现)。因此,我认为默认的ToString方法(没有参数)是一个VisualStudio调试钩子——这意味着它通常不应该被调试上下文之外的程序重载以供使用。虽然知情人士利用调试属性(DebuggerTypeProxyAttribute、DebuggerDisplayAttribute、DebuggerBrowsableAttribute)来自定义调试器,但许多人(包括我自己)通常认为由ToString生成并显示在Watch窗口中的默认输出已经足够好了。我知道这是一个相当严格的观点——将ToString编写为调试器挂钩——但我发现实施IFormattable似乎是更可靠和可扩展的途径。就个人而言,我并不经常实施ToString。在许多情况下,它没有多大意义,因为类型的主要作用可能是定义行为,而不是数据。在其他情况下,这无关紧要,因为没有客户需要它。无论如何,这里有一些有意义的情况(不是详尽的列表):我不同意您列出的使用场景之间存在冲突。当显示是主要目的时,ToString应该提供用户友好的文本,但为了记录(或者更确切地说,如您所描述的,为了跟踪),我会说在任何情况下都不应该跟踪特定于UI元素,而是一个对象目的是写详细的跟踪数据。所以不存在冲突,因为根据单一职责原则,它不应该是同一类型。请记住,如果需要更多控制,您始终可以重载ToString方法。以上就是C#学习教程:C#:ToString()应该如何实现?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
