已经包含了一个定义
我有一个名为Assign
and的类
private int SeatNumber; public Assign(int SeatNum) { SeatNumber = SeatNum; } public int SeatNumber { get { return SeatNumber; } set { SeatNumber = value; } }
我不知道为什么我收到以下错误
类型’WindowsFormsApplication1.Assign’已包含’SeatNumber’的定义
怎么了?
你在这里两次声明相同的变量。
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; } }
您应该确保支持该属性的变量具有不同的名称。 通常使用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;}
这允许您删除支持变量:编译器将为您处理它。
私有变量和公共变量不能具有相同的名称,即冲突的来源。 做这个:
private int _seatNumber; public Assign(int SeatNum) { SeatNumber = SeatNum; } public int SeatNumber { get { return _seatNumber; } set { _seatNumber = value; } }
下划线表示法对于私有变量很常见。
抛出错误是因为您基本上是在构造函数中为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