6

Assign私はと呼ばれるクラスを持っています

    private int SeatNumber;

    public Assign(int SeatNum)
    {
        SeatNumber = SeatNum;
    }

    public int SeatNumber
    {
        get { return SeatNumber; }
        set { SeatNumber = value; }

    }

次のエラーが発生する理由がわかりません

Eタイプ'WindowsFormsApplication1.Assign'には、'SeatNumber'の定義がすでに含まれています

なにが問題ですか?

4

4 に答える 4

10

ここで同じ変数を 2 回宣言しています。

private int SeatNumber;
public int SeatNumber
{
    get { return SeatNumber; }
    set { SeatNumber = value; }

}

そのコードは、同じ変数を 2 回定義しています。.net 3.0 以降を使用している場合は、次のような自動実装プロパティを no で実行できますprivate int SeatNumber

public int SeatNumber
{
    get;
    set;
}

それ以外の場合は、次のようにする必要があります。

private int SeatNumber_;
public int SeatNumber
{
    get { return SeatNumber_; }
    set { SeatNumber_ = value; }
}
于 2012-12-07T19:49:56.840 に答える
5

プロパティをサポートする変数の名前が異なることを確認する必要があります。キャメルケースを使用するのが一般的です。

private int seatNumber;

public Assign(int SeatNum)
{
    SeatNumber = SeatNum;
}

public int SeatNumber
{
    get { return seatNumber; }
    set { seatNumber = value; }
}

さらに、getter と setter が些細な場合、C# 3.0 以降では、次のように自動プロパティを使用できます。

public int SeatNumber {get; set;}

これにより、バッキング変数を削除できます。コンパイラが処理します。

于 2012-12-07T19:49:30.150 に答える
4

プライベート変数とパブリック変数に同じ名前を付けることはできません。これが競合の原因です。これを行う:

private int _seatNumber;

public Assign(int SeatNum)
{
    SeatNumber = SeatNum;
}

public int SeatNumber
{
    get { return _seatNumber; }
    set { _seatNumber = value; }

}

プライベート変数ではアンダースコア表記が一般的です。

于 2012-12-07T19:49:15.423 に答える
0

基本的にコンストラクターで SeatNumber に何かを割り当ててから、プロパティで再度実行しているため、エラーがスローされます。Visual Studio でクラス フィールドを作成するときは、「propfull」と入力してタブ キーを 2 回押します。これにより、フィールドとプロパティが自動的に作成されます。

価値のあることとして、これはクラスを構造化する一般的に受け入れられている方法です。

class Assign
   {
      //Fields
      private int _seatNumber;


      //Properties
      public int SeatNumber
      {
         get { return _seatNumber; }
         set { _seatNumber = value; }
      }

      //Overloaded Constructors
      public Assign(int sn)
      {
         SeatNumber = sn;
      }
      public Assign()
      {

      }

      //Methods 
      public void SomeMethod()
      {
         //insert code
      }
      public void SomeOtherMethod()
      {
         //insert code
      }

   }//END ASSIGN CLASS
于 2012-12-07T20:06:22.977 に答える