已经包含了一个定义

时间:2012-12-07 19:47:18

标签: c# visual-studio-2010

我有一个名为Assign

的班级
    private int SeatNumber;

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

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

    }

我不知道为什么会收到以下错误

  

ET类型'WindowsFormsApplication1.Assign'已包含'SeatNumber'的定义

有什么问题?

4 个答案:

答案 0 :(得分:9)

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

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

}

该代码定义了两次相同的变量。如果您使用的是.net 3.0+,则可以执行此类自动实现的属性而不使用private int SeatNumber

public int SeatNumber
{
    get;
    set;
}

否则,你应该这样做:

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

答案 1 :(得分:5)

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

private int seatNumber;

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

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

此外,在getter ans setter很简单的情况下,从C#3.0开始,您可以使用自动属性,如下所示:

public int SeatNumber {get; set;}

这使您可以删除支持变量:编译器将为您处理它。

答案 2 :(得分:4)

私有变量和公共变量不能具有相同的名称,即冲突的来源。这样做:

private int _seatNumber;

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

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

}

下划线表示法对于私有变量很常见。

答案 3 :(得分: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