How to avoid stack overflow errors when defining set accessor in C#

前端 未结 4 802
眼角桃花
眼角桃花 2021-01-18 19:45

People of stackoverflow. I am new to c# and this is the first time I have not been able to find an answer to one of my elementary questions. Who can help me?!I am trying to

相关标签:
4条回答
  • 2021-01-18 20:27

    You're calling the getter and setter recursively (calling themselves infinitely), inevitably causing a stack overflow.

    Surely this is what you mean to be doing:

    private string headline;
    public string Headline
    {
        get { return headline; }
        set { headline = value; }
    }
    

    Note that this is unnecessary if you don't plan to introduce any further get/set logic, as this is exactly what your first example does behind the scenes.

    When learning about properties in c#, it helps to think of them not as data, but as a pair of methods with the following signatures:

    public string get_Headline() { ... }
    public void set_Headline(string value) { ... }
    

    In fact, this is exactly how the compiler defines them.

    Now it's easy to see that your initial code would call set_Headline recursively.

    0 讨论(0)
  • 2021-01-18 20:27

    Because you're returning the same thing recursively.

    private string _headLine
    
    public string Headline
    { 
       get 
       { return _headline; } 
       set 
       { _headline = value; } 
    }
    
    0 讨论(0)
  • 2021-01-18 20:41

    You need a backing field if you are trying to use set and get with your property.

    private string _headline; //backing field.
    
    public string Headline
    {
        get { return _headline; }
        set { _headline = value; }
    } 
    

    In your current code, you are trying to set your property recursively, and thus resulting in stackoverflow exception

    0 讨论(0)
  • 2021-01-18 20:51

    In this case instead of generating a new variable like the rest of the answers are saying. You can simply just write.

    public string Headline { get; set;}
    

    This will allow anyone to retrieve this variable which you could re write as

    public string Headline;
    

    If you want the setting to be private you can say.

    public string Headline { get; private set; }
    

    I like it this way better because this way you don't have to allocate a new variable and the readability of the code greatly increases :)

    0 讨论(0)
提交回复
热议问题