C # "Ссылка на объект не установлена ​​на экземпляр объекта." - PullRequest
0 голосов
/ 20 января 2011

Я получаю эту ошибку, когда пытаюсь использовать подключенный к нему 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 ]

1 голос
/ 20 января 2011

Тогда 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
}
0 голосов
/ 20 января 2011

PlanePosition не инициализируется.Вы должны убедиться, что объект назначен PlanePosition перед вызовом Accelerate

0 голосов
/ 20 января 2011

Вообще говоря, ошибка произойдет, когда вы попытаетесь использовать объект, который не был создан.

Таким образом, PlanePosition - это имя класса, вы захотите создать экземпляр класса, а затемиспользуйте метод с объектом.

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

Но я не думаю, что предоставлено достаточно подробностей, чтобы быть более конкретным, чем то, что я вам дал.Что такое PlanePosition?Класс или объект?

...