1

可以说我有以下课程

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

谢谢!

4

1 回答 1

2

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

protected string name;

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

protected string Name { get; set; }

只需使用它而不是字段。

(一般来说,最好的做法是不要让字段转义它们被声明的类型。因此,一旦您需要从声明类型之外访问该字段,您应该考虑使用属性。)

于 2012-05-30T01:23:40.230 回答