There is no (explicit) reference to a firstName private variable which FirstName is supposed to be hiding. Could you explain how this works?
I assume there is some private variable that is being getted and setted.
Thanks.
// auto-implemented property FirstName
public string FirstName { get; set; }
Basically the compiler converts your code into something like this:
That’s unlikely to be the exact name, but the use of angle brackets in the name is important – because it makes it an unspeakable name. (That’s unofficial terminology, but widely used – I don’t know whether Eric Lippert actually coined it, or whether he was just the first person to use it in something I read.) It’s a name which isn’t a valid C# identifier, but which the CLR is quite happy with. That has two benefits:
It uses the same technique for all kinds of other generated code – anonymous types, anonymous functions, iterator blocks etc.