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

时间:2012-05-30 01:21:26

标签: c# .net

假设我有以下课程

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()方法。

谢谢!

1 个答案:

答案 0 :(得分:2)

这是一个简单的可见性问题。由于您未明确指定它,name字段是私有的,因此子类无法访问它。您可以使其成为protected

protected string name;

这是最简单的解决方案,但更好的方法是使用属性:

protected string Name { get; set; }

只需使用此而不是字段。

(通常,最好不要让字段转义为声明它们的类型。所以一旦你需要从声明类型外部访问字段,你应该考虑使用属性。)