C#“对象引用未设置为对象的实例。”

时间:2011-01-20 15:58:21

标签: c# visual-studio-2008

当我尝试使用连接到它的btn时出现错误:

private void btnAccel_Click(object sender, EventArgs e)
            {

                pStatus.Text = plane.speed.ToString();
                plane.speed = double.Parse(txtSpeed.Text);
                plane.Accelerate();
                pStatus.Text = plane.speed.ToString();   
            }

pStatus是我使用的面板,在我提高速度之前和之后更新当前速度。 plane在上面定义为:

Airplane plane = new Airplane();

当它到达plane.Accelerate();

时似乎发生了错误
public void Accelerate()
        {
            // increase the speed of the airplane

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

        }//end of public Accelerate()

第一行if(PlanePosition.speed < Position.MAX_SPEED)是VS告诉我的地方。


//private variables
        private string name{get; set;}
       private Position planePosition;
        private static int numberCreated;

        //default constructor
        public Airplane()
        {

        }//end of public Airplane


        public Position PlanePosition{get;set;}

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

        //default constructor
        public Position()
        {

        }//end of public Position

        public string displayPosition()
        {
            return "okay";
        }//end of public string displayPosition()
    }//end of class Position

3 个答案:

答案 0 :(得分:1)

然后PlanePosition显然是null。你可能错过了

PlanePosition = new Position(); // or whatever the type of PlanePosition is

Airplane

的构造函数中
private PlanePosition = new Position();

初始化字段或类似地,如果它是属性。

我看到你将以下评论留给了另一个答案:

  

public Position PlanePosition{get;set;}

所以这是一个自动属性,你没有初始化它。因此,它接收参考类型为null的默认值。您需要在构造函数中初始化它:

public Airplane() {
    this.PlanePosition = new Position(// parameters for constructor);
    // rest of constructor
}

答案 1 :(得分:0)

一般来说,当您尝试使用尚未实例化的对象时,会发生错误。

因此,PlanePosition是类的名称,您将要实例化该类,然后将该方法与该对象一起使用。

PlanePosition myPlane = new PlanePosition();
myPlane.speed < ...

但我认为没有足够的细节比我给你的更具体。什么是PlanePosition?一个类或一个对象?

答案 2 :(得分:0)

PlanePosition未初始化。在调用Accelerate

之前,您需要确保将对象分配给PlanePosition