我是否可以要求子类初始化在其父类中声明的变量?

时间:2015-05-13 14:11:05

标签: c#

我有一个抽象类Animal,其中的类继承了该类的变量。例如,Name字符串将包含该类所代表的动物的名称。

我的问题是,我是否可以要求在子的构造函数中初始化这些变量?我想确保Cat.cs,Dog.cs等实际存储一个名称。我相信我可以创建一个虚拟的Start()或Awake()方法,但这只能确保Name字符串中包含的东西,而不是动物的实际名称。

2 个答案:

答案 0 :(得分:7)

如果您要将此构造函数添加到基础Animal类:

public abstract class Animal
{
    protected Animal(string name)
    {
        this.Name = name;
    }

    public string Name { get; set; }
}

从中派生的任何类型都需要将该参数提供给构造函数:

public class Dog : Animal
{
    public Dog(string name) : base(name)
    {
    }
}

请参阅MSDN

答案 1 :(得分:3)

这与haim770几乎完全相同,但是显示你也可以拥有默认构造函数(另外还有一点我会在底部指出)

public abstract class Animal
{
    public string Name { get; private set; }

    public Animal(string name)
    {
        Name = name;
    }
}

public class Dog : Animal
{
    public Dog()
        : base("Rover")
    {

    }

    public Dog(string name)
        : base(name)
    {

    }
}

此处唯一需要注意的是Animal的构造函数未声明为protected。为什么?因为它并不重要。因为Animal是一个抽象类,所以无论如何都无法创建它的新实例,因此在这种情况下,使构造函数public在功能上等同于使它成为protected