繁体   English   中英

对象类型背后具有ToString(),GetHashCode(),GetType等方法的原因是什么?

[英]What is the reason behind Object Type having methods like ToString(),GetHashCode(),GetType etc

我有一个看起来很愚蠢的问题。 在基本Object Type上定义诸如ToStrin(),GetHashCode(),GetType()等方法之后,是否有任何特定原因? .Net框架是否在内部将这些方法用于任何目的。 只是好奇地知道这种设计背后的想法。

谢谢,sveerap

这些方法被认为是所有对象所需的最低要求。 通过将它们引入System.Object类,它们可用于.NET中的所有对象。

每个服务于一个目的:

  • EqualsReferenceEquals用于相等性检查
  • GetHashCode允许在哈希集合中使用对象
  • 反射才能正常工作需要GetType
  • ToString允许所有对象(无论类型如何)都以字符串形式表示,这非常有用
  • Finalize允许垃圾收集器正确处理资源
  • MemberwiseClone允许生成对象的浅表副本
  • GetType()用于反射
  • GetHashCode()用于对象比较

主要的.NET语言没有鸭子类型,因此即使两个不同的类T1和T2具有称为“ ToString”的方法,您也将无法编写可对T1或T2类型的对象起作用的代码。 这就是为什么在对象中声明多态代码常用的方法的原因。 而且,由于您提到的方法几乎对所有类都有意义,因此这实际上并不会造成危害。

编辑:实际上,C#确实支持在其最新版本中输入鸭子。 但这招致了反射开销,而且ToString和company的定义已经很久了,甚至还没有人想到过使C#成为鸭类友好的对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM