2010-08-17 148 views
1

我是默认的PHP程序员,我需要C#.NET(微型框架,但这并不重要)项目的一点帮助。在C#.NET构造函数中扩展类和重写属性

基本上,我有一个类,允许控制一个遥控车或飞机速度控制器。该课程已经编写完成,但我需要一种将设置导入课程的方式,因为不同的电动速度控制器需要不同的设置。

我的理想设置是这样的:

SpeedController esc = new SpeedController(SpeedControllers.TRAXXAS_XL5); 

我知道如何构造和所有的工作,但我怎么配置SpeedControllers.TRAXXAS_XL5一部分?我会创建一个基类(Speedcontrollers),然后是一个扩展它的类,覆盖默认值,是否正确?

有人可以指导我谈论我正在谈论的内容或子类的小代码片段覆盖父类中的属性吗?

+0

是SpeedControllers枚举或一组SpeedController单身的称呼呢? SpeedControllers.TRAXXAS_XL5的类型究竟是什么? – 2010-08-17 04:19:09

+0

我在想TRAXXAS_XL5是扩展SpeedControllers并覆盖一系列设置的类。 – chris12892 2010-08-17 04:32:03

回答

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 2010-08-17 04:38:19

2

IMO,要做到这一点最好的办法是这样的:

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

大声笑的声明,虽然我有一种感觉,SpeedControllers.TRAXXAS_XL5指的是一个内部的类/结构,或者也许是一个枚举。 – 2010-08-17 04:22:25

+0

这绝不意味着对CLR的敲门声。 Windows或Microsoft,但请不要在“真实”飞机的任何关键组件上使用Micro Framework ......它不是实时操作系统。至于你的代码,你应该考虑静态只读一个常量。 – 2010-08-17 04:28:38

+0

别担心,它不适合飞机。如果是这样,它不会在NETMF – chris12892 2010-08-17 04:31:27

1

如果SpeedControllers.TRAXXAS_XL5只是配置数据(即所有数值),那么我不会认为这是派生类的最佳示例。

是的,您可以创建一个基类(SpeedController),其中包含属性和可能的​​默认值。然后你可以创建覆盖的派生类。

相反,迈克卡隆已经证明使用相同,并简单的使用数据的初始化建立各专门情况下,控制器类的。我会推荐类似的东西(如果你想使配置变得容易,可能需要从外部文件加载数据)。

+0

但是,如果有三种不同的方式来实例化SpeedController?我不认为这对车辆的品牌和型号会有很好的效果,但是如果您想要从一辆卡车'SpeedController'区分列车'SpeedController'并相应地设置一些默认对象特征,则它可能会有效。 – 2010-08-17 04:24:54

+0

我无法从文件加载,它已嵌入。我一般会同意,是的,这将是不应该被硬编码的东西,但在这种情况下,它是。 – chris12892 2010-08-17 04:27:08

+0

强制链接:http://thedailywtf.com/Articles/The-cbitmap.aspx(阅读评论,然后滚动你的眼睛) – 2010-08-17 04:53:56