System.Object是基类

时间:2011-11-25 11:55:33

标签: c# inheritance

对于很多人来说,这个问题可能是正常的,我试了一个小时来理解这些事情,但没有得到适当的解释。

MSDN说, System.Object是.NET Framework中所有类的最终基类;它是类型层次结构的根。

当C#不允许多重继承时,我怎样才能继承,比如A类到B类?因为所有类,都已经从System.Object继承了吗? 我在这里谈论正常的继承。

Class A { --- }
Class B : A { --- }

请清除我的怀疑。 谢谢。

更新

同样,我怀疑的是,所有类继承自System.Object,然后使类B具有类A和System.Object。从上面的例子

8 个答案:

答案 0 :(得分:17)

正确,C#只允许单一继承。 System.Object类由类A隐式继承。因此,类B是-A A,它是一个System.Object。这由编译器负责,因此您不需要明确说出Class A : System.Object(尽管您可以,如果您愿意)。

答案 1 :(得分:7)

很简单。 猿继承自动物,黑猩猩继承自猿。黑猩猩也从动物身上继承,但主要不是通过猿。 在.NET中,如果类没有显式声明其继承,则编译器会添加IL代码以从System.Object继承它。如果是,则通过父类型继承System.Object。

答案 2 :(得分:5)

看,你只能有一个父亲。但你的父亲也可以有一个父亲。因此,您从祖父那里继承了一些属性。 Dog类继承自Mammals,而Animal继承自LivingThing类,后者继承自{{1}}类。

答案 3 :(得分:1)

多重继承意味着例如A类直接从B类和C类继承,如下所示:

class A : B, C

在C#中不起作用。您的示例意味着您从一个本身继承自另一个的类继承,如下所示:

class A : object
{
}

class B : A
{
}

这在C#中是可能的。

答案 4 :(得分:1)

好像你对“多重继承”的含义有些轻微的混淆?

当B从A继承而A继承自O'时,多重继承。这只是一个简单的继承层次结构 - 这是C ++,Java和C#的一个特性。

在上面的例子中,我们说B从A继承直接,并从O继承间接 .B从A继承(非私有)成员,间接地,O的(非私人)成员。

C ++另外支持真正的多重继承,有时可称为“混合继承”:多重继承的一个例子是

 class A : public O {};
 class B : A, O {};

这里B直接从O继承,直接从A继承 - 在这种情况下,两个副本的O成员存在于B中,并访问成员B来自O,你需要指定你想要的那些副本:

e.g。 b.O::omember;b.A::omember;

使用大型C ++类框架时,在使用多重继承时,通常可以在派生类中获得不需要的基类副本。为了解决这个问题,C ++提供了虚拟继承,它只强制继承虚拟基类的一个副本:下面的例子应该清楚这一点(或者让它更加混乱!)

// Note, a struct in C++ is simply a class with everything public
struct O { int omember; };
struct A1 :  O {};
struct B1 :  O, A1 {};

struct A2 :  virtual O {};
struct B2 :  virtual O, A2 {};

B1 b1;
B2 b2;

// There are two 'omember's in b1
b1.omember; // Compiler error - ambiguous
b1.A1::omember = 1;
b1.O::omember = 2;

// There's only one 'omember' in b2, so all the following three lines
// all set the same member
b2.A2::omember = 1;
b2.O::omember = 2;
b2.omember = 3;

答案 5 :(得分:0)

A继承自System.Object。类B继承自继承自A

的类System.Object

答案 6 :(得分:0)

您不能继承两个类,但可以继承类的层次结构。

System.Object
    |
     \-- Class A {}
         |
          \-- Class B {}



public class ClassA
{
}

public class ClassB : ClassA
{
}

public class ClassC : ClassB
{
}

答案 7 :(得分:0)

多重继承意味着从多个类继承到一个类中。您的示例有效,但您无法执行以下操作:

B组:A,C {---}

多重继承的定义:

“多重继承是一些面向对象的计算机编程语言的一个特性,其中一个类可以从多个超类继承行为和特性。”