具有ToString(),GetHashCode(),GetType等方法的Object Type背后的原因是什么?

时间:2011-01-07 02:41:40

标签: c# .net

我有一个可能看起来很傻的问题。在基础对象类型上定义ToStrin(),GetHashCode(),GetType()等方法背后是否有任何特定原因。这些方法是否由.Net框架内部用于任何目的。只是好奇地知道这个设计背后的想法。

谢谢, sveerap

3 个答案:

答案 0 :(得分:5)

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

每个都有用:

  • EqualsReferenceEquals用于等式检查
  • GetHashCode允许在散列集合中使用对象
  • 反射工作需要
  • GetType
  • ToString允许所有对象(无论何种类型)以字符串形式表示,这非常有用
  • Finalize允许垃圾收集器正确处理资源
  • MemberwiseClone允许生成对象的浅拷贝

答案 1 :(得分:0)

  • GetType()用于反射
  • GetHashCode()用于对象比较

答案 2 :(得分:0)

主要的.NET语言没有鸭子类型,因此即使两个不同的类T1和T2具有名为“ToString”的方法,您也无法编写可以作用于T1类型的对象的代码或T2。这就是为什么多态代码常用的方法在Object中声明的原因。因为你提到的方法对几乎所有的课程都有意义,所以这不会真正有害。

编辑:实际上,C#确实支持最新版本的鸭子打字。但这会产生反射开销,ToString和公司也早在任何人想到使C#鸭子打字友好之前就定义了。