首先设置基构造函数的属性
本文关键字:属性 构造函数 设置 | 更新日期: 2023-09-27 18:35:37
假设我有以下类
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
构造函数(名称 == null)之后被调用。但是在poodle
构造函数中,我可能想访问在基构造函数中设置的一些属性等。
有谁知道如何做到这一点,或者也许是解决这个问题的更好的编码实践? (我能想到的唯一解决方案不是真正使用构造函数,而是有一个单独的 initialize() 方法。
谢谢!
这是一个简单的可见性问题。 由于您没有明确指定它,因此name
字段是私有的,因此子类无法访问它。 你可以这样protected
:
protected string name;
这将是最简单的解决方案,但更好的方法是使用属性:
protected string Name { get; set; }
只需使用它而不是字段。
(通常,最佳做法是不让字段转义声明它们的类型。 因此,一旦需要从声明类型外部访问字段,就应考虑使用属性。