如何从具有重载构造函数的抽象类派生

本文关键字:构造函数 抽象类 派生 重载 | 更新日期: 2023-09-27 18:15:56

我有一个抽象类有两个重载的构造函数。我想要求所有派生类实现这两个构造函数,因为这两个变体都支持类A提供的一些虚拟方法,这对所有派生类都非常有益。我的模型类似如下:

public abstract class A
{
    protected int _x {get;set;}
    protected int _y {get;set;}
    protected string _z {get;set;}
    public A(int x, int y)
    {
       _x = x;
       _y = y;
    }
    public A(int x, int y, string z)
    {
       _x = x;
       _y = y;
       _z = z;
    }
}

我知道我可以这样声明第一个构造函数:

public class B : A { B(int x, int y) : base (x , y) {}
}
但是如何在派生类中声明抽象类的第二个构造函数呢?

如何从具有重载构造函数的抽象类派生

根本没有继承构造函数。你可以声明你想要的任何构造函数,并确保每个构造函数都正确地链接到基类构造函数或同一类中的另一个构造函数。

例如,可以输入:

public class B : A
{
    public B(int x, int y) : base(x , y) {}    
    public B(int x, int y, string z) : base(x, y, z) {}
    public B() : base(0, 0, "Hello!") {}
    public B(int x) : this(x, 10, "Chained to B") {}
}