C#(又一次?)变量不保存

时间:2011-01-20 16:48:46

标签: c# visual-studio-2008

谁猜谁回来了! 程序运行(horrah)但现在变量没有保存值。 主要形式:

Airplane plane = new Airplane();    

private void btnAccel_Click(object sender, EventArgs e)
{
    lblStatus.Text = plane.speed.ToString();
    plane.speed = double.Parse(txtSpeed.Text);
    plane.Accelerate();
    lblStatus.Text = plane.speed.ToString();        

}

来自飞机班:

class Airplane
{
    private string name{get; set;}
    private Position PlanePosition;
    private static int numberCreated;

    public Airplane()
    {
        this.PlanePosition = new Position();
    }

    public void Accelerate()
    {
        // increase the speed of the airplane    
        if (PlanePosition.speed < Position.MAX_SPEED)
        {
            PlanePosition.speed +=1;  // or speed += 1;
        }//end of if
        numberCreated++;  // increment the numberCreated each time an Airplane object is created    
    }

“位置”是另一个类:

class Position
{
    internal int x_coordinate;
    internal int y_coordinate;
    internal double speed;
    internal int direction;
    internal const int MAX_SPEED = 50;

    public Position()
    {                
    }

    public string displayPosition()
    {
        return "okay";
    }
}

由于某种原因,主窗体中文本框中的变量进入“速度”变量,但Airplane类中的速度变量没有该变量。

4 个答案:

答案 0 :(得分:2)

您的示例不完整,或者您的代码是神奇编译的。我猜你需要实现一个属性来访问PlanePosition实例中包含的速度。

class Airplane
{
    private string name{get; set;}
    private Position PlanePosition;
    private static int numberCreated;

    public double speed
    {
        get { PlanePosition.Speed = value; }
        set { return PlanePosition.speed; }
    }

    public Airplane()
    {
        this.PlanePosition = new Position();
    }

    public void Accelerate()
    {
        // increase the speed of the airplane    
        if (PlanePosition.speed < Position.MAX_SPEED)
        {
            PlanePosition.speed +=1;  // or speed += 1;
        }//end of if
        numberCreated++;  // increment the numberCreated each time an Airplane object is created    
    }
}

答案 1 :(得分:1)

从文本框设置速度后,您正在调用“加速”。因此自动将速度提高1 ......这不是问题所在吗?如果没有,你可以为不熟悉你正在做什么的人提供更多的信息吗?

答案 2 :(得分:0)

一般而言,在我们查看您的问题之前,请先查看您的对象模型。速度真的是飞机位置的一个属性吗?真的?

你需要首先解决这个问题的原因是因为,保持原样,你最终会建立一个无法维护的代码,其中编码器必须具体知道所有内容的存储位置。

此外,最高速度不应该固定为一个恒定的值 - 某个地方的人最终会建立一个更快的飞机并毁掉你的一整天。

我建议,在进一步讨论之前,考虑一下这些问题。如果您在课堂上与其他学生一起工作,同行评审可能是您想要考虑的事情。

至于问题本身,您是否通过调试器逐步完成了代码?只需逐步执行代码,通常可以揭示您所编写的内容与您当时要编写的内容之间的差异......

在btn_Accel_Click中粘贴一个断点 - 它甚至会被解雇吗?我知道你认为我是在讽刺,但我真的不是 - 我正在努力帮助你。这正是我在试图分析一切之前陷入困境之前会做的事情。

马丁。

答案 3 :(得分:0)

您的飞机舱没有速度属性。它会如何工作?

或者你像Greg Buehled那样做,或者你可以尝试这样的事情:

将您的PlanePositon设置为公开

class Airplane
{
    private string name{get; set;}
    public Position PlanePosition;
    private static int numberCreated;

    public Airplane()
    {
        this.PlanePosition = new Position();
    }

    public void Accelerate()
    {
        // increase the speed of the airplane    
        if (PlanePosition.speed < Position.MAX_SPEED)
        {
            PlanePosition.speed +=1;  // or speed += 1;
        }//end of if
        numberCreated++;  // increment the numberCreated each time an Airplane object is created    
    }

然后在btnAccel_Click事件中更改它。

private void btnAccel_Click(object sender, EventArgs e)
{
    lblStatus.Text = plane.speed.ToString();
    plane.PlanePosition.speed = double.Parse(txtSpeed.Text);
    plane.Accelerate();
    lblStatus.Text = plane.PlanePosition.speed.ToString();        

}

这不是最好的,但也是一种方式。