对多重继承感到困惑

时间:2013-12-22 16:04:53

标签: c# .net oop

我刚读了一些C#类不能从多个类继承的地方,同时我还读到每个C#类都是从基类“Object Class”继承的。

现在我很困惑,如果我让另一个类继承一些类,那么它继承自类和基类,即两个类。

这不是违法吗?

7 个答案:

答案 0 :(得分:9)

每个类都继承自另一个类。如果你让自己的类扩展其他一个类,那么它不会直接从Object继承,而是从你的超类继承。反过来的超类将继承自Object

您的子类将通过超类提供Object中的所有方法。

这将说明它:

void Main()
{
    Console.WriteLine (new Super().GetType().BaseType);
    Console.WriteLine (new Sub().GetType().BaseType);
}

class Super { }
class Sub : Super { }

输出:

enter image description here

答案 1 :(得分:9)

这在C#中可行:

enter image description here

(每个派生类有一个基类,又名“单inheritance”)

这在C#中是不可能的:

enter image description here

Multiple inheritance,使用interfaces代替C#)

答案 2 :(得分:6)

  

我刚读了一些C#类不能从多个类继承的地方,同时我还读到每个C#类都是从基类“Object”继承的。现在我很困惑。

除了对象之外的每个C#类都从完全一个其他类继承直接。对象继承自无类。

C#类可以从任何(非负数!)类继承间接

class Animal : Object {}
class Giraffe : Animal {}

我们的规则是否符合要求?是。对象从没有类继承。 Animal直接从Object继承,间接从没有类继承。 Giraffe直接从Animal继承,间接从Object继承。

这消除了矛盾。

答案 3 :(得分:1)

除了Object本身之外,每个类如果不扩展另一个类,将隐含地扩展Object。因此,所有类最终总是从Object扩展。

支持多重继承的唯一通用编程语言是C ++,但在大多数语言中显然不允许这样做。

答案 4 :(得分:0)

一个类可以直接从另一个类继承并实现多个接口 你可以链接继承,例如,类a继承自类b,而类c继承自类a。

interface i {}
class a {}
class b : a {}   // OK
class c : i,b {} // OK
class d : a,b {} // Not OK

答案 5 :(得分:0)

多重继承意味着可以根据需要对类的继承树进行分支(即,它可以同时从多个基类继承)。那是(感谢上帝)在C#中不可能。

但是只要继承树总是只有一个“大腿”,它就可以像需要的那样深(即有一个类似继承'链',其中一个类继承另一个)。

答案 6 :(得分:0)

它没有违反规则。

C#中的每个类都将从一个类继承。该类要么是该类的作者想要扩展的任何类,要么如果没有指定,它将扩展Object类。

public class MyClass {} // extends from default Object class

完全相同
public class MyClass : object {}

或者,当作者想要扩展指定的类时:

public class MyClass : AnyBaseClass {}