2010-12-11 7 views
2

Спасибо заранее,C#: Как использовать константный переменную производный класс в конструктор базового в

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

private List<Tire> m_Tires; 

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

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

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

+1

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

ответ

4

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

+0

Спасибо за супер быстрый ответ. Я не знаю, как это я пропустил. Вы решили мою проблему. – alonmo

1

Как о создании:

initializeTires(int numberOfTyres); 

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

1

@Oded и примером этого является

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) { } 
} 
+0

На самом деле, что мне лучше подходит в моем случае: Публичный публичный класс объявлений Транспортное средство { private List m_Tires; защищенный автомобиль (int i_NumOfTires) { m_Tires = новый Список (i_NumOfTires); }} общественный класс автомобиля: Автомобиль { частное Const ИНТ k_NumOfTires = 4 общественного автомобиля(): база (k_NumOfTires) {}} – alonmo

+0

да, я получил немного путают с противоречивой информацией ... Вы упомянули вам нужно было инициализировать на основе числа, но ваш пример init-method не принял никаких аргументов :) –

+0

Я вижу, где вы запутались, я думал, что initializeTires будет ссылаться непосредственно на переменную const. Мне было ясно, когда я это написал, но я вижу, что это может быть немного запутанным. – alonmo