inheritance自System.Object

众所周知,C#类只能从Single Base类inheritance它是如何理解的,因为所有类都派生自System.Object?

另外,如果我查看类ValueType定义(例如),我知道它直接从System.Objectinheritance,我发现它只是一个抽象类。 我希望看到:public abstract class ValueType:System.Object

最容易将inheritance可视化为层次结构或树。 看看这是否有意义:

  System.Object / \ / \ / \ MyProject.SomeClass MyProject.SomeBaseClass / \ / \ / \ MyProject.SomeDerivedClass MyProject.SomeOtherDerivedClass 

查看MyProject.SomeDerivedClass ,您可以清楚地看到它在层次结构中只有一个父级,即它的基类MyProject.SomeBaseClass 。 现在, MyProject.SomeBaseClass也只有一个父系统System.Object

虽然MyProject.SomeDerivedClass直接System.Objectinheritance,但它的父System.Object ; 父inheritance或提供的所有内容都会传递给派生对象。 因此,即使MyProject.SomeDerivedClass仅直接从MyProject.SomeBaseClassinheritance,它仍然inheritance自System.Object因为它的父System.Object

众所周知,C#类只能从单个基类inheritance。

这不是众所周知的,因为该陈述绝对是错误的。 在C#中,类可以从任意多个基类和接口inheritance成员。

您已经将inherits-members-from-type关系与direct-from- from-type关系混淆了。

实际的规则是除System.Object之外的每个类都直接来自一个类。 System.Object的独特之处在于它是唯一直接从无任何内容派生的类。

每个类和每个接口都可以直接从任意多个接口派生。

类或接口直接或间接地inheritance它派生的每个类或接口的成员。 “直接或间接推导”关系是直接推导关系的传递闭包

因为你是从对象间接inheritance的; 例如

 Object <= Foo <= Bar <= Blap 

因此,object是所有托管类型的根(但不是所有类型;例如,原始不安全指针不从对象inheritance)。

无论你inheritance什么基类,最终你都会间接派生自System.Object

所以例如

 public myConreteClass : myBaseClass {} public myBaseClass : System.Object {} 

无论多长时间,链接在哪一个底层类上,可能会也可能不会从某些东西inheritance而inheritance自System.Object

A类派生自从System.Object派生的B类。

根据文件 :

这是.NET Framework中所有类的最终基类; 它是类型层次结构的根。

关键词是层次结构

所以这意味着(在一些想象中的应用程序中)一个名为Cat的类可以inheritance自Mammal ,它可以inheritance自Animal ,然后inheritance自System.Object

如果有的话,所有类都inheritance自object

 public class Foo {} 

这与写作相同:

 public class Foo : object {} 

如果Bar子类为Foo:

 public class Bar : Foo {} 

然后我们仍然很好,因为Fooinheritance自对象,Bar也是如此。

C#类只能从一个Base类inheritance而其他类也可以从同一个类inheritance,因此多个类可以从同一个类inheritance,但每个calss只从一个类inheritance。

您可以在当时inheritance一种类型:

假设你有一个Object类型

 public class Object { } 

那么你有一个名为String的类型,你可以从对象inheritance字符串

 public class String : Object { } 

然后创建一个名为StringWithColors的类,inheritance自String

 public class StringWithColors : String { } 

此时,你的新类StringWithColors将inheritance自StringObject ..依此类推……