我有一个名为Assign
和
private int SeatNumber;
public Assign(int SeatNum)
{
SeatNumber = SeatNum;
}
public int SeatNumber
{
get { return SeatNumber; }
set { SeatNumber = value; }
}
我不知道为什么会收到以下错误
ET类型'WindowsFormsApplication1.Assign'已包含'SeatNumber'的定义
有什么问题?
答案 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