为什么如果我的类没有';Don’不要继承任何东西

本文关键字:Don 继承 任何东 我的 如果 为什么 | 更新日期: 2023-09-27 18:21:27

我有点困惑以下代码是如何工作的

public class DefaultClass
{
    public override bool Equals(object obj)
    {
        return base.Equals(obj);
    }
}

我的问题是:我没有继承任何类,但我如何仍然能够覆盖Equals方法。此代码在VS2010中得到了完美的编译。知道这是怎么回事吗?

为什么如果我的类没有';Don’不要继承任何东西

因为默认情况下,您的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类中定义,因此您将在此处重写此方法。