假设我有以下课程
class animal
{
public string name;
public animal(string name)
{
this.name = name;
}
}
以及
class dog : animal
{
public string breed;
public dog(string name, string breed): base(name)
{
this.breed = breed;
}
}
最后
class poodle : dog
{
public poodle(string name, string breed, int hairLength): base(name, breed)
{
//in here, name is = null for some reason.
}
}
问题在于,当我有三级继承层次结构时,基本构造函数(animal
)似乎在poodle
构造函数(name == null)之后被调用。但是在poodle
构造函数中,我可能想要访问在基础构造函数中设置的一些属性等。
有谁知道如何做到这一点,或者可能是一个更好的编码实践来解决这个问题? (只有我能想到的解决方案并不是真正使用构造函数,而是使用单独的initialize()方法。
谢谢!
答案 0 :(得分:2)
这是一个简单的可见性问题。由于您未明确指定它,name
字段是私有的,因此子类无法访问它。您可以使其成为protected
:
protected string name;
这是最简单的解决方案,但更好的方法是使用属性:
protected string Name { get; set; }
只需使用此而不是字段。
(通常,最好不要让字段转义为声明它们的类型。所以一旦你需要从声明类型外部访问字段,你应该考虑使用属性。)