我刚读了一些C#类不能从多个类继承的地方,同时我还读到每个C#类都是从基类“Object Class”继承的。
现在我很困惑,如果我让另一个类继承一些类,那么它继承自类和基类,即两个类。
这不是违法吗?
答案 0 :(得分:9)
每个类都继承自另一个类。如果你让自己的类扩展其他一个类,那么它不会直接从Object
继承,而是从你的超类继承。反过来的超类将继承自Object
。
您的子类将通过超类提供Object
中的所有方法。
这将说明它:
void Main()
{
Console.WriteLine (new Super().GetType().BaseType);
Console.WriteLine (new Sub().GetType().BaseType);
}
class Super { }
class Sub : Super { }
输出:
答案 1 :(得分:9)
答案 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 {}