【问题标题】:C# does not inherit the constructor from base class [duplicate]C#不从基类继承构造函数[重复]
【发布时间】:2011-05-31 11:19:16
【问题描述】:

可能的重复:
Constructors and Inheritance
Why are constructors not inherited?

定义从基类继承的类时,我必须重新定义它的所有构造函数。 我想知道为什么 C# 不支持从基类的构造函数继承?

【问题讨论】:

  • 不要认为它是用任何其他语言(如 Java)完成的。仅从子类调用默认 ctor(如果有)。
  • 好吧,因为它是一个不同的对象。 (功能相同)
  • @KarlKnechtel 因为如果在子类中没有显式定义构造函数,则允许复制基类中的构造函数是有意义的。基类可能具有您可以使用构造函数设置的变量,例如 (X, Y, Color) 不会在派生类中更改,即构造函数仍然有效。
  • @KarlKnechtel 出于同样的原因继承所有其他公共方法?

标签: c# .net inheritance constructor


【解决方案1】:

构造函数不会被继承,因为我们无法正确确定派生类对象是如何实例化的。当所有派生类都隐式使用父类的构造函数时,在我看来这将是一个问题,因为如果我们忘记重新定义构造函数,则对象可能已被错误地初始化。如果您希望派生类构造函数与父类构造函数执行相同的操作,请使用base 调用它。

还要注意,如果您不调用任何其他带参数的基类构造函数,则基类构造函数(无参数)会自动运行。所以打电话给base() is redundant

【讨论】:

    【解决方案2】:

    派生类的构造函数隐式调用基类或 Java 术语中的超类的构造函数。在继承中,所有基类的构造函数都在派生类的构造函数之前调用,按照类在类层次结构中出现的顺序。

    现在,如果基类有多个构造函数,那么派生类必须定义应该调用哪一个。例如:

    public class CoOrds
    {
        private int x, y;
    
        public CoOrds()
        {
            x = 0;
            y = 0;
        }
    
        public CoOrds(int x, int y)
        {
            this.x = x;
            this.y = y;
        }
    }
    
    //inherits CoOrds:
    public class ColorCoOrds : CoOrds
    {
        public System.Drawing.Color color;
    
        public ColorCoOrds() : base ()
        {
            color = System.Drawing.Color.Red;
        }
    
        public ColorCoOrds(int x, int y) : base (x, y)
        {
            color = System.Drawing.Color.Red;
        }
    }
    

    欲了解更多信息,请访问:http://msdn.microsoft.com/en-us/library/ms228387(v=vs.80).aspx

    【讨论】:

    • 这是原始问题的真正赢家答案。尽管是一个旧帖子,但我毫不怀疑您的回答。你是唯一做对的人。这正是我一直在寻找的,它就像你描述的那样工作。谢谢。
    【解决方案3】:

    只有成员变量和成员方法可以从一个类继承到派生。

    【讨论】:

      猜你喜欢
      • 2014-03-01
      • 1970-01-01
      • 2015-05-25
      • 2014-08-21
      • 1970-01-01
      • 2013-03-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多