【问题标题】:Why does this code throw StackOverFlow Exception? [duplicate]为什么这段代码会抛出 StackOverFlow 异常? [复制]
【发布时间】:2020-07-25 22:27:47
【问题描述】:

我在学习 C# 中的 getter 和 setter 时遇到了这段代码。我了解 c# 上下文有什么问题。它没有编译时错误,但会引发运行时异常。谁能解释导致调用堆栈溢出的原因?

using System;

class Program
{
    static void Main(string[] args)
    {
        Test test = new Test();
        Console.WriteLine(test.Company);
    }
}

class Test
{
    public string Company
    {
        get
        {
            return Company;
        }
        set
        {
            Company = value;
        }
    }
}

【问题讨论】:

  • 因为Company 的getter 返回Company,它返回Company,它返回Company,它返回Company...直到堆栈溢出。
  • 您应该查看您的堆栈跟踪,并且您会立即发现您缺少一个支持字段,并且您正在为 Company 属性分配一个值,该属性将值分配给分配值的自身给自己分配价值给自己......无休止
  • StackOverflow 今天充满了堆栈溢出stackoverflow.com/questions/63084798/… - 我想知道这些是否因为彼此重复而关闭会导致 StackOverflowoverflow.. :)
  • @legacycode 我认为它是 getter 而不是 setter,但我明白你的意思。关于堆栈跟踪的好点,你应该把它写成一个答案 - 这将是一个很好的教育点
  • 这能回答你的问题吗? StackOverflow Exception from get and set

标签: c# exception stack-overflow getter-setter


【解决方案1】:

那是因为你在你的 getter 中调用你的属性。 你可以做两件事:为你的班级添加一个字段/成员:

class Test
{
    private string company;   
    public string Company
    {
        get
        {
            return company;
        }
        set
        {
            company = value;
        }
    }
}

或者改成

public string Company{get; set;}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-27
    • 1970-01-01
    相关资源
    最近更新 更多