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 对我不起作用?

提前致谢!!

//问候

4

4 回答 4

5

问题是您已将方法标记为静态。由于它是静态的,因此它具有“无”状态,并且无法访问未标记为静态的类成员。

您可以将 m_nameList 标记为静态,但这意味着它的值在所有读取和写入之间共享。m_nameList 看起来像一个简单的查找表,所以也许这就是你想要的?

推荐阅读静态静态类和静态成员

于 2012-07-27T16:09:20.550 回答
1

您的函数是静态的,但您的变量不是静态的。

于 2012-07-27T16:09:42.290 回答
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;
    }
于 2012-07-27T16:11:06.460 回答
1

您混合了两个概念:使用构造函数初始化的实例和具有静态成员的静态类。您不能期望静态成员方法访问非静态字段。我猜你的m_nameList字段也是静态的,否则你的代码甚至不会编译。您应该选择以下任何一种方式:

  1. 使所有SeatManager的成员非静态;
  2. SeatManager类变成一个所有成员都是静态的静态类。

由于您需要SeatManager使用席位总数来初始化 ,因此更好的方法似乎是 No. (1)。然后SeatManager.CheckVacantSeats()你会调用一个像mySeatManager.CheckVacantSeats(). 即使总是只有一个实例SeatManager——单例——这种方法也更好。使用单例,您最终可以得到一个public static SeatManager Instance { get; set; }属性SeatManager并像这样使用它SeatManager.Instace.CheckVacantSeats():这通常称为单例模式

于 2012-07-27T16:15:42.247 回答