继承自System.Object

use*_*174 5 c#

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

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

Eri*_*ert 21

众所周知,C#类只能从单个基类继承.

这并不为人所熟知,因为该陈述绝对是错误的.在C#中,类可以从任意多个基类和接口继承成员.

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

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

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

类或接口直接或间接地继承它派生的每个类或接口的成员."直接或间接推导"关系是直接推导关系的传递闭包.


Mar*_*ell 12

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

Object <= Foo <= Bar <= Blap
Run Code Online (Sandbox Code Playgroud)

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


Ada*_*ras 5

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

                     System.Object
                     /           \
                    /             \
                   /               \
MyProject.SomeClass                 MyProject.SomeBaseClass
                                         /           \
                                        /             \
                                       /               \
                   MyProject.SomeDerivedClass     MyProject.SomeOtherDerivedClass
Run Code Online (Sandbox Code Playgroud)

看一下MyProject.SomeDerivedClass,你可以清楚地看到它在层次结构中只有一个父类,它的基类,MyProject.SomeBaseClass.现在,MyProject.SomeBaseClass也只有一个父母,System.Object.

虽然MyProject.SomeDerivedClass直接继承System.Object,但它的父母呢; 父继承或提供的所有内容都会传递给派生对象.因此,即使MyProject.SomeDerivedClass只是直接继承MyProject.SomeBaseClass,它仍然继承,System.Object因为它的父级是这样做的.

  • 当一个类没有指定它的基类是什么时,它默认继承自`System.Object`.这就是为什么`public abstract class ValueType`和`public abstract class ValueType:System.Object`是相同的. (4认同)