我有一个可能看起来很傻的问题。在基础对象类型上定义ToStrin(),GetHashCode(),GetType()等方法背后是否有任何特定原因。这些方法是否由.Net框架内部用于任何目的。只是好奇地知道这个设计背后的想法。
谢谢, sveerap
答案 0 :(得分:5)
这些方法被认为是所有对象所需的最低要求。通过将它们引入System.Object
类,它们可用于.NET中的所有对象。
每个都有用:
Equals
和ReferenceEquals
用于等式检查GetHashCode
允许在散列集合中使用对象GetType
ToString
允许所有对象(无论何种类型)以字符串形式表示,这非常有用Finalize
允许垃圾收集器正确处理资源MemberwiseClone
允许生成对象的浅拷贝答案 1 :(得分:0)
答案 2 :(得分:0)
主要的.NET语言没有鸭子类型,因此即使两个不同的类T1和T2具有名为“ToString”的方法,您也无法编写可以作用于T1类型的对象的代码或T2。这就是为什么多态代码常用的方法在Object中声明的原因。因为你提到的方法对几乎所有的课程都有意义,所以这不会真正有害。
编辑:实际上,C#确实支持最新版本的鸭子打字。但这会产生反射开销,ToString和公司也早在任何人想到使C#鸭子打字友好之前就定义了。