我对以下代码如何工作感到有点困惑
public class DefaultClass
{
public override bool Equals(object obj)
{
return base.Equals(obj);
}
}
我的问题是:我不是继承任何类,但我仍然可以覆盖Equals方法。此代码在VS2010中完美编译。知道这是如何工作的吗?
答案 0 :(得分:32)
因为您的DefaultClass
'默认继承自object
。
您现在正在覆盖object.Equals
。
我理解这种困惑。 MSDN说像这样的类不会继承任何其他类,但确实如此(object
):
继承:无。示例:
class ClassA { }
答案 1 :(得分:9)
Object class是所有类的父类,所有类都继承自它。因此,您的Default Class
也会继承Object
类
这是.NET Framework中所有类的最终基类; 它是类型层次结构的根。
您可以使用树形结构来理解这一点:
System.Object
/ \
/ \
/ \
SomeProject.DefaultClass SomeProject.SomeOtherBaseClass
/ \
/ \
/ \
SomeProject.ChildClass1 SomeProject.ChildClass2
另外,请查看Eric Lippert撰写的这篇非常相关的文章,它可以帮助您理解Object类: - Not everything derives from object
答案 2 :(得分:2)
System.Object是.NET Framework中所有类的最终基类;它是类型层次结构的根。
因此,所有类都可以覆盖此类中定义的方法。 System.Object类中定义的方法是Equals(),Finalize(),GetHashCode()和ToString()。
答案 3 :(得分:2)
你的理解是你不是从任何一个班级继承是不对的。
请参阅:Object.Equals Method (Object) - MSDN
因为 Object类是所有类型的基类 .NET Framework ,
Object.Equals(Object)
方法提供了 所有其他类型的默认相等比较。但是,类型 经常覆盖Equals方法以实现值相等。
答案 4 :(得分:1)
您的默认类继承自Object类。这是.NET Framework中所有类的最终基类;它是类型层次结构的根。
这就是你可以覆盖其方法的原因。
因为.NET Framework中的所有类都是从Object派生的,所以Object类中定义的每个方法都可以在系统中的所有对象中使用。派生类可以并且确实覆盖其中一些方法,包括:
Equals
- 支持对象之间的比较。Finalize
- 在自动回收对象之前执行清理操作。GetHashCode
- 生成与对象值对应的数字,以支持使用哈希表。ToString
- 制作一个描述该类实例的人类可读文本字符串。答案 5 :(得分:1)
Object Class是所有用户定义类的基类,因为您创建了一个名为 DefaultClass 的类,这将由Object类的子类创建。因此,Equals()方法已在Object类中定义,因此您将在此处覆盖此方法。