2

このコードに問題があり、それを機能させる方法がわかりません。問題が何であるかがわかりません。うまくいくように見えます。両方の場所で m_nameList と呼ばれる文字列配列は、「非静的フィールド、メソッド、またはプロパティ 'Solutionname.classname.m_nameList' に必要なオブジェクト参照」としてマークされています。

コード:

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

m_nameList は、この static 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 が機能しないのかを理解するのに助けが必要ですか?

前もって感謝します!!

//よろしく

4

4 に答える 4

5

問題は、メソッドを静的としてマークしたことです。これは静的であるため、状態は "no" であり、静的としてマークされていないクラス メンバーにはアクセスできません。

m_nameList を static としてマークできますが、それはその値がすべての読み取りと書き込みで共有されることを意味します。m_nameList は単純なルックアップ テーブルのように見えますが、これでよろしいでしょうか?

推奨される読み方はstaticおよびStatic Classes と Static Memberです。

于 2012-07-27T16:09:20.550 に答える
1

コンストラクターで初期化されたインスタンスと、静的メンバーを持つ静的クラスの 2 つの概念が混在しています。静的メンバー メソッドが非静的フィールドにアクセスすることは期待できません。あなたのフィールドも静的だと思いますm_nameList。そうしないと、コードはコンパイルさえしません。次のいずれかの方法を選択する必要があります。

  1. すべてSeatManagerの のメンバーを非静的にします。
  2. SeatManagerクラスを、すべてのメンバーが静的な静的クラスに変換します。

総座席数でを初期化する必要があるので、SeatManager(1)の方法が良いようです。次に、代わりに のSeatManager.CheckVacantSeats()ようなインスタンスを呼び出しますmySeatManager.CheckVacantSeats()。シングルトンのインスタンスが常に 1 つしかない場合でも、SeatManagerこのアプローチの方が優れています。シングルトンを使用すると、最終的に のpublic static SeatManager Instance { get; set; }プロパティにSeatManagerなり、次のように操作できますSeatManager.Instace.CheckVacantSeats()。これは通常、シングルトン パターンと呼ばれます。

于 2012-07-27T16:15:42.247 に答える
1

関数は静的ですが、変数は静的ではありません。

于 2012-07-27T16:09:42.290 に答える
1

あなたの呼び出しは最初は間違っています.あなたのメソッドCheckVacantSeatsは1つのパラメータしか受け付けないので、2つで呼び出すことはできません??!

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 に答える