2010-08-17 2 views
1

По умолчанию я программист на PHP, и мне нужна небольшая помощь в проекте C# .NET (Micro Frameworks, но это не имеет значения здесь).Расширение классов и переопределение свойств в конструкторе C# .NET

В принципе, у меня есть класс, который позволяет управлять автомобилем RC или контроллером скорости самолета. Класс уже написан, но мне нужен способ импортировать настройки в класс, поскольку для регуляторов скорости с разной скоростью требуются разные настройки.

Мой идеал создать бы что-то вроде этого:

SpeedController esc = new SpeedController(SpeedControllers.TRAXXAS_XL5); 

Я знаю, как конструктор, и все, что работа, но как я могу настроить SpeedControllers.TRAXXAS_XL5 часть? Я бы создал базовый класс (Speedcontrollers), а затем класс, который расширяет его, переопределяя значения по умолчанию, правильно?

Может ли кто-нибудь направить меня в учебное пособие по поводу того, что я говорю, или небольшой фрагмент кода для переопределения свойств дочернего класса в родительском классе?

+0

Является SpeedControllers перечисление или набор SpeedController одиночек? Что такое тип SpeedControllers.TRAXXAS_XL5? –

+0

Я думал, что TRAXXAS_XL5 будет классом, расширяющим SpeedControllers и переопределяющим ряд настроек. – chris12892

ответ

2

Я просто возьму пример, используя гипотетический MaxSpeed, который может иметь провизор.

abstract class SpeedControllers { 
    public abstract int MaxSpeed { get; } 

    public class TRAXXAS_XL5 : SpeedControllers{ 
     public override int MaxSpeed { 
      get { 
       return 30; 
      } 
     } 
    } 
} 

Затем в конструкторе SpeedController

class SpeedController { 
    readonly SpeedControllers properties; 
    public SpeedController(SpeedControllers properties) { 
     this.properties = properties; 
    } 
    public int MaxSpeed { 
     get { 
      return properties.MaxSpeed; 
     } 
    } 
} 

Назовите это с new SpeedController(new SpeedControllers.TRAXXAS_XL5())

+0

Удивительный. Это именно то, что мне нужно. Благодаря! – chris12892

2

ИМО, лучший способ сделать это было бы что-то вроде этого:

public struct SpeedControllers { 
    int speed; 
    int etc; 

    public SpeedControllers(int s, int e) { 
     speed = s; 
     etc = e; 
    } 

    public const SpeedControllers TRAXXAS_XL5 = new SpeedControllers(123, 345); 
    public const SpeedControllers WHATEVER = new SpeedControllers(456, 789); 
} 

И есть SpeedController конструктор читать значения из структуры. Очевидно, добавьте/настройте поля по мере необходимости.

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я не запускал это через компилятор, только через свой мозг. Не пытайтесь летать фактический самолет с этим, как есть;)

+0

lol для отказа от ответственности, хотя у меня такое чувство, что SpeedControllers.TRAXXAS_XL5 относится к внутреннему классу/структуре или, возможно, к перечислению. –

+0

Это никоим образом не означало стук против CLR. Windows или Microsoft, но, пожалуйста, не используйте Micro Framework на любом критическом компоненте «реального» самолета ... Это не оперативная ОС.Что касается вашего кода, вы, вероятно, должны рассматривать статическую readonly над константой. –

+0

Не волнуйтесь, это не для самолета. Если бы это было так, это не было бы на NETMF – chris12892

1

Если SpeedControllers.TRAXXAS_XL5 не что иное, конфигурации данных (то есть, все числовые значения), то я не считал бы это оптимальным примером производных классов.

Да, вы можете создать базовый класс (SpeedController), который содержит свойства и, возможно, значения по умолчанию. Затем вы можете создать производные классы, которые переопределяют.

Вместо того, что Майк Caron продемонстрировал использует класс же и просто с помощью инициализации данных для создания различных специализированных экземпляров класса контроллера. Я бы рекомендовал что-то подобное (возможно, загружая значения из внешнего файла, если вы хотите упростить его настройку).

+0

Но что, если есть три разных способа создания экземпляра SpeedController? Я не думаю, что это будет очень хорошо работать для моделей и моделей транспортных средств, но это может сработать, если вы хотите отличить поезд 'SpeedController' от грузовика' SpeedController' и соответствующим образом настроить некоторые характеристики объекта по умолчанию. –

+0

Я не могу загрузить из файла, он встроен. Я бы вообще согласился, что да, это было бы что-то, что НЕ должно быть жестко закодировано, но в этом случае оно есть. – chris12892

+0

Обязательная ссылка: http://thedailywtf.com/Articles/The-cbitmap.aspx (Читайте комментарии, а затем закатывайте глаза) –

Смежные вопросы