C #: как использовать константную переменную производного класса в конструкторе базы - PullRequest
2 голосов
/ 11 декабря 2010

Заранее спасибо,

Моя ситуация такова, что у меня есть абстрактный класс Vehicle , который содержит:

private List<Tire> m_Tires;

Дело в том, что количество шин в списке определяется в производных классах и различается между собой, но код, необходимый для создания экземпляра, одинаков, и поэтому я бы предпочел избежать дублирования кода и разместить код (который создает экземпляр m_Tires ) в абстрактном Vehicle конструкторе класса.

Сначала я подумал об использовании protected abstract void initializeTires();, который будет реализован в производных классах и будет вызван из конструктора Vehicle. Я видел здесь, что это плохое программирование и подвержено ошибкам.

Итак, вкратце: Можно ли здесь избежать дублирования кода, или мне просто придется с этим смириться?

Ответы [ 3 ]

4 голосов
/ 11 декабря 2010

Вы можете создать конструктор protected и объединить его в цепочку.

1 голос
/ 11 декабря 2010

@ Одед, и примером этого является

public abstract class MyAbstract {
   private List<Tire> m_Tires;

   protected MyAbstract(int count) {
      m_Tires = new List<Tire>(count);
   }
}

public class MyClass : MyAbstract {
   public MyClass(int count) : base(count) { }   
}
1 голос
/ 11 декабря 2010

Как насчет создания:

initializeTires(int numberOfTyres); 

в базовом классе и вызовите его с правильным параметром в производном классе.

...