2012-12-07 141 views
3

定义我有一个类叫做Assign已经包含了

private int SeatNumber; 

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

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

    } 

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

e下键入“WindowsFormsApplication1.Assign”已经包含了定义'SeatNumber'

出了什么问题?

回答

8

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

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; } 
} 
+0

很好,非常感谢!现在即将与另一个问题。随着SeatNumber我也有一个“私人布尔SeatStatus_ =假”,也使用相同的方法。在我的form.cs中我有 “static int NumberOfSeats; Assign [] AssignArray = new Assign [NumberOfSeats];”和“int RowIndex = Int32.Parse(this.textSeatNumber.Text)-1;”如果行小于值“AssignArray [RowIndex] .SeatNumber = this.checkBookSeat.Checked;”但我得到一个错误的转换bool int! –

+0

听起来像您需要将您的布尔SeatStatus_重命名为其他内容,以便它不会与int SeatStatus_变量冲突。 –

4

私人和公共变量不能有相同的名称,这是冲突来自的地方。这样做:

private int _seatNumber; 

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

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

} 

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

5

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

private int seatNumber; 

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

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

此外,在吸气ANS二传手是微不足道的情况下,开始用C#3.0,你可以使用自动属性,像这样:

public int SeatNumber {get; set;} 

这可以让你删除后备变量:编译器会为你处理它。

+0

+1为自动属性。 – Gallen

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