2012-07-27 8 views
2

У меня возникли проблемы с этим фрагментом кода, и я не могу понять, как заставить его работать. Я не могу понять, в чем проблема, как мне кажется, это должно сработать. Массив строк называется m_nameList на обоих местах отмечены как «ссылка на объект требуемого для не статического Фейлд, метода или свойства„“Solutionname.classname.m_nameListУ меня возникли проблемы с назначением массива?

код:

public static bool CheckVacantSeats(int seatNumber) 
    {    
     if (m_nameList[seatNumber] == null) 
     { 
      return true; 
     } 
     return false; 
    } 

m_nameList является массив, который объявлен в конструкторе до этого статического BOOL:

 public SeatManager(int maxNumberOfSeats) 
    { 
     m_totNumOfSeats = maxNumberOfSeats; 
     m_nameList = new string[m_totNumOfSeats]; 
     m_priceList = new double[m_totNumOfSeats]; 
    } 

Я звоню CheckVacantSeat из другого класса с этим:

bool validSeats = SeatManager.CheckVacantSeats(seatNumber, m_nameList);  

Я не могу понять, что с ним не так. Так что мне нужна помощь в выяснении, почему m_nameList не работает для меня?

Спасибо заранее!

// С уважением

+0

Стандартная ошибка: переписать 'if (x) return true; else return false; 'to' return x; '- ** always **. –

ответ

5

Проблема заключается в том, что вы пометили ваш метод как статический. Поскольку он является статическим, он имеет состояние «нет» и не может обращаться к членам класса, которые не помечены как статические.

Вы можете пометить m_nameList как статический, но это значит, что это значение является общим для всех чтений и записей. m_nameList выглядит как простая таблица поиска, так что, возможно, это то, что вы хотите?

Рекомендуемое значение: static и Static Classes and Static Members.

+0

Точно, как он узнает, к какому экземпляру участника к доступу? – BlackVegetable

+0

(поможет вам с лучшим словом) Читает и пишет? – BlackVegetable

1

Ваша функция статическая, но ваши переменные не являются статическими.

1

Ну, ваш звонок неправильный для начала, ваш метод CheckVacantSeats принимает только один параметр, поэтому вы не можете его назвать двумя ??!

CheckVacantSeats(int seatNumber) 
SeatManager.CheckVacantSeats(seatNumber, m_nameList); 

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

Я думаю, что ваш после того, как:

SeatManager seatManager = new SeatManager(maxNumberOfSeats); 
seatManager.CheckVacantSeats(seatNumber); 

Также

public bool CheckVacantSeats(int seatNumber) 
    {    
     if (m_nameList[seatNumber] == null) 
     { 
      return true; 
     } 
     return false; 
    } 
1

Вы смешиваете два понятия: экземпляр инициализируется конструктором, и статический класс со статическими членами. Вы не можете ожидать, что статический метод-член получит доступ к нестатическому полю. Я думаю, ваше поле m_nameList тоже статично, иначе ваш код даже не будет компилироваться. Вы должны выбрать любой из этих продуктов:

  1. все составляющие SeatManager не статические;
  2. превратить класс SeatManager в статический класс, имеющий все элементы статические.

Поскольку вам необходимо инициализировать SeatManager с общим количеством мест, лучшим способом является No. (1).Затем вместо SeatManager.CheckVacantSeats() вы вызовете экземпляр типа mySeatManager.CheckVacantSeats(). Даже в случае, когда всегда будет только один случай SeatManager - одноэлементный - этот подход лучше. С singleton вы можете получить public static SeatManager Instance { get; set; } недвижимость в SeatManager и работать с ним вот так: SeatManager.Instace.CheckVacantSeats(). Обычно это называется singleton pattern.

Смежные вопросы