This falls into the “learn something new everyday but not necessarily entirely useful bucket”. An app I spend a bit of time on leverages the CodeDom heavily to spit out managed code. While running through some test cases the other day I noticed that it was prefixing many identifier names with the @ symbol when the generated code was C#.
At first I assumed this was a bug in my code but I noticed that the generated code compiled just fine. A bit of digging through the C# spec turned up the purpose of the @ character. This allows you to use C# keywords as identifiers. For instance you can have “class @class”.
VB has the same type of feature but they require the name to be wrapped in .
This still didn’t answer the question of why my code generated with this character. It turns out this is a feature of the C# CodeDom. When outputting an identifier, the C# CodeDom will prefix the identifier with @ if one of the following conditions are true.
- The identifier is a keyword
- The identifier is prefixed with two underscores.
It turns out the second rule exists to allow flexibility in the C# compiler implementation. All identifiers that are prefixed with two underscores are inherently reserved for the implementation to provide such actions as extended keywords (reference at bottom of above link).