继承自System.Object

时间:2011-11-28 17:08:51

标签: c#

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

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

9 个答案:

答案 0 :(得分:21)

  

众所周知,C#类只能从一个基类继承。

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

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

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

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

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

答案 1 :(得分:12)

因为您从对象继承间接;例如

Object <= Foo <= Bar <= Blap

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

答案 2 :(得分:5)

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

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

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

虽然MyProject.SomeDerivedClass

}父继承或提供的所有内容都会传递给派生对象。因此,即使System.Object仅直接从MyProject.SomeDerivedClass继承,它仍然继承自MyProject.SomeBaseClass,因为它的父级会这样做。

答案 3 :(得分:2)

无论您从哪个基类继承,最终都会间接派生自System.Object

所以例如

public myConreteClass : myBaseClass
{}

public myBaseClass : System.Object
{}

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

答案 4 :(得分:1)

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

答案 5 :(得分:1)

根据the documentation

  

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

关键词是层次结构

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

答案 6 :(得分:1)

所有类都继承自object,因为我们有

public class Foo {}

这与写作相同:

public class Foo : object {}

如果Bar子类为Foo:

public class Bar : Foo {}

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

答案 7 :(得分:1)

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

答案 8 :(得分:1)

您可以在当时继承一种类型:

假设你有一个Object

类型
public class Object { } 

然后你有一个名为String的类型,你可以从对象

继承字符串
public class String : Object { } 

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

public class StringWithColors : String { } 

此时,您的新课程StringWithColors将继承自StringObject ..依此类推......