首先设置基构造函数的属性

本文关键字:属性 构造函数 设置 | 更新日期: 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; }

只需使用它而不是字段。

(通常,最佳做法是不让字段转义声明它们的类型。 因此,一旦需要从声明类型外部访问字段,就应考虑使用属性。