在C#.NET构造函数中扩展类和覆盖属性

时间:2010-08-17 04:14:29

标签: c# .net

默认情况下,我是一名PHP程序员,我需要一点C#.NET(Micro Frameworks,但这并不重要)项目的帮助。

基本上,我有一个类可以控制RC汽车或飞机速度控制器。该类已经编写,但我需要一种方法将设置导入到类中,因为不同的电子速度控制器需要不同的设置。

我理想的设置是这样的:

SpeedController esc = new SpeedController(SpeedControllers.TRAXXAS_XL5);

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

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

3 个答案:

答案 0 :(得分: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构造函数从结构中读取值。显然,根据需要添加/自定义字段。

免责声明:我没有通过编译器运行它,只能通过我的大脑。不要试图用这样的飞机飞行;)

答案 1 :(得分:2)

我将使用控制器可能具有的假设MaxSpeed来举例。

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

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

然后在你的速度控制器构造函数

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())

进行调用

答案 2 :(得分:1)

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

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

相反,Mike Caron演示的是使用相同的类,只需使用数据初始化来创建控制器类的各种专用实例。我会推荐类似的东西(如果你想让它易于配置,可能从外部文件中加载值)。