众所周知,C#类只能从Single Base类继承 它是如何理解的,因为所有类都派生自System.Object?
另外,如果我查看类ValueType定义(例如),我知道它直接从System.Object继承,我发现它只是一个抽象类。我希望看到: public abstract class ValueType:System.Object
答案 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)
这是.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
将继承自String
和Object
..依此类推......