当编译器执行set属性时,我的程序抛出此异常(' System.StackOverflowException')。
葡萄酒课:class wine
{
public int year;
public string name;
public static int no = 5;
public wine(int x, string y)
{
year = x;
name = y;
no++;
}
public int price
{
get
{
return no * 5;
}
set
{
price = value;
}
}
}
program.cs类:
课程计划 { static void Main(string [] args) {
wine w1 = new wine(1820, "Jack Daniels");
Console.WriteLine("price is " + w1.price);
w1.price = 90;
Console.WriteLine(w1.price);
Console.ReadLine();
}
}
答案 0 :(得分:13)
设置price属性时,调用setter,调用setter调用setter等。
解决方案:
public int _price;
public int price
{
get
{
return no * 5;
}
set
{
_price = value;
}
}
答案 1 :(得分:9)
您正在设置器中设置setter的值。这是一个无限循环,因此是StackOverflowException。
您可能打算根据您的getter使用支持字段no
:
public int price
{
get
{
return no * 5;
}
set
{
no = value/5;
}
}
或者可能使用自己的支持领域。
private int _price;
public int price
{
get
{
return _price;
}
set
{
_price = value;;
}
}
但是,如果是后者,你根本不需要支持字段,你可以使用自动属性:
public int price { get; set; } // same as above code!
(旁注:属性应以大写字母开头 - Price
而不是price
)
答案 2 :(得分:0)
当您设置任何值时,您的属性设置器会自行调用,因此会产生堆栈溢出,我想您想要做的是:
public int price
{
get
{
return no * 5;
}
set
{
no = value / 5;
}
}