对于很多人来说,这个问题可能是正常的,我试了一个小时来理解这些事情,但没有得到适当的解释。
MSDN说, System.Object是.NET Framework中所有类的最终基类;它是类型层次结构的根。当C#不允许多重继承时,我怎样才能继承,比如A类到B类?因为所有类,都已经从System.Object继承了吗? 我在这里谈论正常的继承。
Class A { --- }
Class B : A { --- }
请清除我的怀疑。 谢谢。
更新
同样,我怀疑的是,所有类继承自System.Object,然后使类B具有类A和System.Object。从上面的例子
答案 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 {---}
多重继承的定义:
“多重继承是一些面向对象的计算机编程语言的一个特性,其中一个类可以从多个超类继承行为和特性。”