2012-07-27 55 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是這篇靜態布爾之前宣佈的構造排列:

 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;否則返回false;'返回x;' - **總是**。 – 2012-07-27 16:13:37

回答

5

的問題是,你有你的標記方法爲靜態。由於它是靜態的,它具有「no」狀態,並且不能訪問沒有標記爲靜態的類成員。

您可以將m_nameList標記爲靜態,但這意味着它的值在所有讀取和寫入之間共享。 m_nameList看起來像一個簡單的查找表,所以也許這是你想要的?

推薦讀數是staticStatic Classes and Static Members

+0

確切地說,它如何知道哪個成員的實例可以訪問? – BlackVegetable 2012-07-27 16:09:58

+0

(幫助你一個更好的詞)讀寫? – BlackVegetable 2012-07-27 16:25:53

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)。然後,您可以調用類似mySeatManager.CheckVacantSeats()的實例,而不是SeatManager.CheckVacantSeats()。即使在總是隻有一個SeatManager的例子 - 單例 - 這種方法更好。對於單身人士,您最終可能會在SeatManager中獲得public static SeatManager Instance { get; set; }財產,並且像這樣使用它:SeatManager.Instace.CheckVacantSeats()。這通常被稱爲singleton pattern