[英]How come an interface instance has GetType, GetHashCode, Equals and ToString methods?
[英]What is the reason behind Object Type having methods like ToString(),GetHashCode(),GetType etc
我有一个看起来很愚蠢的问题。 在基本Object Type上定义诸如ToStrin(),GetHashCode(),GetType()等方法之后,是否有任何特定原因? .Net框架是否在内部将这些方法用于任何目的。 只是好奇地知道这种设计背后的想法。
谢谢,sveerap
这些方法被认为是所有对象所需的最低要求。 通过将它们引入System.Object
类,它们可用于.NET中的所有对象。
每个服务于一个目的:
Equals
和ReferenceEquals
用于相等性检查 GetHashCode
允许在哈希集合中使用对象 GetType
ToString
允许所有对象(无论类型如何)都以字符串形式表示,这非常有用 Finalize
允许垃圾收集器正确处理资源 MemberwiseClone
允许生成对象的浅表副本 主要的.NET语言没有鸭子类型,因此即使两个不同的类T1和T2具有称为“ ToString”的方法,您也将无法编写可对T1或T2类型的对象起作用的代码。 这就是为什么在对象中声明多态代码常用的方法的原因。 而且,由于您提到的方法几乎对所有类都有意义,因此这实际上并不会造成危害。
编辑:实际上,C#确实支持在其最新版本中输入鸭子。 但这招致了反射开销,而且ToString和company的定义已经很久了,甚至还没有人想到过使C#成为鸭类友好的对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.