为什么如果我的类没有';Don’不要继承任何东西
本文关键字:Don 继承 任何东 我的 如果 为什么 | 更新日期: 2023-09-27 18:21:27
我有点困惑以下代码是如何工作的
public class DefaultClass
{
public override bool Equals(object obj)
{
return base.Equals(obj);
}
}
我的问题是:我没有继承任何类,但我如何仍然能够覆盖Equals方法。此代码在VS2010中得到了完美的编译。知道这是怎么回事吗?
因为默认情况下,您的DefaultClass
"继承"自object
。
您现在正在覆盖object.Equals
。
不过我理解这种困惑。MSDN说,这样的类不会继承任何其他类,但它继承了(object
):
继承:无。示例:
class ClassA { }
Object类是所有类的父类,所有类都从中继承。因此,您的Default Class
也继承了Object
类
这是.NET Framework中所有类的最终基类;它是类型层次结构的根。
您可以使用树结构来理解这一点:
System.Object
/ '
/ '
/ '
SomeProject.DefaultClass SomeProject.SomeOtherBaseClass
/ '
/ '
/ '
SomeProject.ChildClass1 SomeProject.ChildClass2
另一方面,请查看Eric Lippert的这篇非常相关的文章,这篇文章可能有助于您理解Object类:并非所有东西都源自对象
System.Object是.NET Framework中所有类的最终基类;它是类型层次结构的根。
因此,所有的类都可以覆盖在这个类中定义的方法。System.Object类中定义的方法有Equals()、Finalize()、GetHashCode()和ToString()。
您认为您不是从任何类继承的理解是不对的。
请参阅:Object.Equals方法(Object)-MSDN
因为Object类是在.NET Framework中,
Object.Equals(Object)
方法提供了所有其他类型的默认相等比较。但是,类型经常重写Equals方法以实现值相等。
但是,请记住:并非所有东西都源于对象-Eric Lippert
Object class是所有用户定义类的基类,当您创建一个名为DefaultClass的类时,这将按Object类的子类进行。因此,Equals()方法已经在Object类中定义,因此您将在此处重写此方法。