我有一个抽象类Animal,其中的类继承了该类的变量。例如,Name字符串将包含该类所代表的动物的名称。
我的问题是,我是否可以要求在子的构造函数中初始化这些变量?我想确保Cat.cs,Dog.cs等实际存储一个名称。我相信我可以创建一个虚拟的Start()或Awake()方法,但这只能确保Name字符串中包含的东西,而不是动物的实际名称。
答案 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
。