创建具有加速和制动的汽车类

时间:2014-04-22 19:03:30

标签: c# class

编辑:我尝试了另一种方式并更新了我的新代码。我现在收到一些错误: 1.'Car_Class_BBrantley.Car.Car()'必须声明一个正文,因为它没有标记为abstract,extern或partial
2.方法'GetCarData'没有重载需要0个参数
3.方法'GetCarData'没有重载需要0个参数 最后两个错误属于GetCarData();两个按钮部分下面的行。

好吧,我的任务是创建一个显示3个主要功能的应用程序:汽车的年份,品牌和速度。年份和品牌输入文本框,速度从0开始。

每次按下时都会有一个加速按钮,加速按钮和速度加5,制动按钮每次按下时减速5。

我无法一起使用该类和表单来显示结果。我需要在消息框中显示make,year和speed。我一直坐在这里几个小时,我无处可去。我得到的错误是“当前上下文中不存在速度”和“我的按钮下的当前上下文中不存在汽车”。我不确定如何解决这个问题。

非常感谢任何和所有帮助。如果这是一团糟,我很抱歉。我以前从未上过课。

以下是表格:

 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Car_Class_BBrantley
{
    public partial class Form1 : Form
    {
        private Car myCar;

        public Form1()
        {
            myCar = new Car;

            InitializeComponent();
        }


        private void GetCarData(Car car)
        {

            try {
            myCar.Make = txtMake.Text;

            myCar.Year = int.Parse(txtModel.Text);

            myCar.Speed = 0;

            }
            catch (Exception ex)
            {
                MessageBox.Show(string.Concat("Must enter a valid make and year model for the car. ", ex.Message, "\r\n", ex.StackTrace));
            } 

        }

        private void btnAcc_Click(object sender, EventArgs e)
        {
            GetCarData();
            myCar.AccSpeed(5);
            MessageBox.Show(" Your car is a " + myCar.Year + myCar.Make + " and it is     traveling " + myCar.Speed + " mph. ");
        }
        private void btnBrake_Click(object sender, EventArgs e)
        {
            GetCarData();
            myCar.DecSpeed(5);
            MessageBox.Show(" Your car is a " + myCar.Year + myCar.Make + " and it is     traveling " + myCar.Speed + " mph. ");
        }


    }
}

    ///////////////////////////////////////////////////////////////////////////////////////
    If you would like to see the class:

    using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Car_Class_BBrantley
{
    class Car
    {
    private int year;
    private string make;
    private int speed;

    public Car()
    {
        this.year = 1994;
        this.make = "Ford";
        this.speed = 0;
    }

    public Car(string make, int year, int speed)
    {
        this.year = year;
        this.make = make;
        this.speed = speed;
    }

    public string Make
    {
        get { return make; }
        set { make = value; }
    }

    public int Year
    {
        get { return Year; }
        set { Year = value; }
    }

    public int Speed
    {
        get { return speed; }
        set { speed = value; }
    }

    public void AccSpeed(int speedIncrement)
    {
        //Add check for speed limit ranges
        Speed += speedIncrement;
    }

    public void DecSpeed(int speedDecrement)
    {
        //Add check for speed limit ranges
        Speed -= speedDecrement;
    }
    }

}

2 个答案:

答案 0 :(得分:2)

此代码:

public int AccSpeed
{
    get { return Speed + 5; }
}

..说" 获取属性Speed中的值的副本,并在返回结果之前将该副本增加为5 "

你想要的是:" 用5增加属性Speed的值,然后返回结果"。这是通过使用:

完成的
public int AccSpeed
{
    get 
    { 
        Speed = Speed + 5;  //shorter code: Speed += 5;
        return Speed;
    }
}

但是,Properties不应该更改get方法中的类的状态。任何使用你代码的人都会感到非常困惑。

而是使用一种方法使其清晰:

public int Accelerate() 
{
    Speed += 5;
    return Speed;
}

答案 1 :(得分:0)

您可以声明您的变量:

public int name { get; set; }

这会自动使其成为带有getter和setter的变量。

对于提高速度等的方法,你可以制作一个像这样的方法fx:

public void AccSpeed() {
  Speed += 5;
}

至于其他人,你应该能够从中找到答案。

编辑:精化。

我认为你对课程的工作方式感到困惑让我详细说明。在您的班级名称中,您已经包含了我猜测的汽车类型,因为该班级应该代表某种类型的汽车。

在编程中你不应该这样想。相反,你应该创建一个可以代表任何和所有类型汽车的汽车类。

因此可能添加一个名为type的字符串变量,并将其插入到构造函数fx中。从而宣布它是什么类型的汽车。然后简单地打电话给你的班级。

如果您稍后想要将方法添加到特定类型的汽车,您可以创建扩展主汽车类的汽车类的子类。

Fx的。如下。然后你将赛车应该具有的其他方法添加到这个类中。

RacingCar : Car {
// class content
}