C # «Ссылка на объект требуется для нестатического поля», Проблема класса со статической функцией-членом - PullRequest
1 голос
/ 20 января 2011

Я работаю над проектом для школы (собираюсь получить степень бакалавра в СНГ), и я столкнулся с этой проблемой с функцией класса.

 public static int GetNumberCreated()
    {
        // return the total number of airplanes created using the class as the blueprint

        return numberCreated;  // returns the number of airplanes created
    }//end of public int GetNumberCreated()

Это программа, которая возвращает значениесколько самолетов вы уже сделали в этой маленькой программе на C #.Я объявил numberCreated в начале:

private int numberCreated;

Я получаю классическую ошибку "Ссылка на объект требуется для нестатического поля, метода или свойства"выяснить, что происходит, но я ничего не придумал.

Однако я установил свойство в нижней части класса, чтобы форма могла получить доступ к переменной:

public int NumberCreated { get; set; }

Я также попытался изменить это свойство на:

public int NumberCreated { get { return numberCreated; } set { numberCreated = value; } }

без удачи.>.> '

Что я делаю не так?

Ответы [ 4 ]

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

Вам необходимо объявить созданный вами номер int как статический.

eg public static int NumberCreated {get;set;}

Вы можете получить доступ к статическому члену из нестатического метода, но вы не можете получить доступ к нестатическому члену из статического метода. например, переменные экземпляра недоступны из статических методов.

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

GetNumberCreated - статический метод. numberCreated - это переменная, созданная с помощью объекта этого класса. Итак, статический метод не знает, где искать, потому что такой переменной нет.

Вам нужно private static int.

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

Это просто - вам нужно добавить ключевое слово "static" перед подписью вашего метода, например:

public static int NumberCreated { get; set; }

Затем вы можете увеличивать / уменьшать следующим образом:

AirplaneFactory.NumberCreated++ / AirplaneFactory.NumberCreated--
0 голосов
/ 20 января 2011

В двух словах, ваш статический метод может быть вызван, даже если "numberCreated" еще не создан.Компилятор сообщает вам, что вы пытаетесь вернуть ребенка без какой-либо предварительной гарантии его рождения.

Измените числоСоздано на статическое свойство, и оно будет скомпилировано.

...