【问题标题】:Constructors inheritance构造函数继承
【发布时间】:2023-04-03 23:58:01
【问题描述】:

我试图理解但仍不确定。如果基类中有构造函数,派生类会一直调用它吗?我知道他们可以覆盖它(这里不是正确的术语,我知道 - 我的意思是向他们的构造函数添加代码)但我假设如果构造函数是在基类中定义的,那么派生的总是会调用它。这是真的吗?

【问题讨论】:

    标签: c# inheritance constructor


    【解决方案1】:

    是的,如果有一个无参数的构造函数,它将总是被调用。如果有多个构造函数,可以使用base关键字选择调用哪一个:

    class Parent {
        public Parent() {}
        public Parent(int x) {}
    }
    
    class Child : Parent {
        public Child(int x) : base(x) {
        }
    }
    

    如果有没有无参数构造函数,你将被强制这样做:

    class Parent {
        public Parent(int x) {}
    }
    
    class Child : Parent {
        // This will not compile without "base(x)"
        public Child(int x) : base(x) {
        }
    }
    

    【讨论】:

    • 不知道我明白了。在第一个示例中,有 Child(int x): base(x) 所以我猜两者都会被调用?
    • @Miria:是的。不可能不调用 some 基本构造函数(例如,在第二个示例中,编译器不会让您删除 base(x));使用base 只允许您选择将调用哪个,以及使用什么参数。
    【解决方案2】:

    如果基类中只有一个无参构造函数,子类构造函数总是会先调用它。另一方面,如果您在基类中定义了其他构造函数,那么子类将有一个选项来调用哪个基构造函数。

    【讨论】:

      猜你喜欢
      • 2013-06-01
      • 2013-03-21
      • 2011-09-09
      • 2014-11-22
      • 2013-03-05
      • 2010-12-11
      相关资源
      最近更新 更多