2012-07-27 59 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