类型的异常' System.StackOverflowException'被扔了

时间:2016-06-02 15:35:44

标签: c#

当编译器执行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();
    }
}

3 个答案:

答案 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;
    }
}