When you access a property from code - inside or outside the class - it is always available as a property. In most cases, this doesnβt matter, but it means that you cannot pass it by the link that you could do if it were a field.
The only piece of code that directly accesses the base field (reflection to the side) is the property itself.
This property is clean and simple. It is not available as a field - it is available as property. The C # compiler does not replace access to them using field access. Access to it is always access to properties. Of course, it can be built in by the JIT compiler, but nothing special. As for the CLR, this is just a normal property (to which the [CompilerGenerated] attribute applies).
But in order to answer your initial question - yes, an automatic property means that you do not need to declare a support field yourself. Effectively this:
public int Foo { get; set; }
translates to
private int <>Foo;
You cannot access the generated field directly in C # code, since it has an inexpressible name. You will see that this is present if you examine the type with reflection, although the CLR does not distinguish between an automatically implemented property and a "normal" one.
source share