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

您在这里声明了两次相同的变量。

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

}

该代码两次定义了相同的变量。如果您使用的是 .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

您应该确保支持该属性的变量具有不同的名称。通常使用 camelCase:

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”并按两次 Tab 键。这将自动为您创建字段和属性。

对于它的价值,这是构建类的普遍接受的方式。

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 回答