How can I access the backing variable of an auto-implemented property?


Question

In the past we declared properties like this:

public class MyClass
{
    private int _age;

    public int Age
    {
          get{ return _age;  }
          set{ _age = value; }
    }
}

Now we can do:

public class MyClass
{
    public int Age {get; set;} 
}

My question is, how can I access the private variable that is created automatically using this notation?

I would rather access the private variable and not the public accessor 'Age'. Is there a default notation to access the private variable, or it is just not possible?

1
79
8/26/2014 4:24:13 PM

The aim of the new automatic properties is to reduce the amount of boilerplate code you need to write when you just have a simple property that doesn't need any special logic in the get or the set.

If you want to access the private member that these properties use, that's usually for a few reasons:

  • You need to more than just a simple get/set - in this case, you should just avoid using automatic properties for this member.
  • You want to avoid the performance hit of going through the get or set and just use the member directly - in this case, I'd be surprised if there really was a performance hit. The simple get/set members are very very easy to inline, and in my (admittedly limited) testing I haven't found a difference between using the automatic properties and accessing the member directly.
  • You only want to have public read access (i.e. just a 'get') and the class write to the member directly - in this case, you can use a private set in your automatic property. i.e.

    public class MyClass
    {
        public int Age {get; private set;} 
    }

This usually covers most the reasons for wanting to directly get to the backing field used by the automatic properties.

92
2/19/2014 7:14:35 PM

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Icon