Это довольно стандартный трюк, используемый в .NET, компилятор также использует его, когда ему нужно сгенерировать имя для автоматически генерируемого класса или поля. Использование такого символа, как $
, гарантирует, что никогда не может быть столкновение имен с идентификатором в программе.
Существует мало шансов на то, что когда вы только программируете на C#, это - это ключевое слово. Но, конечно же, на других языках. Например, вы можете создать проект VB.NET Winforms, отбросить кнопку в форме и назовите ее «это». При локализации формы, появляется источник текста свойства этой кнопки как:
<data name="this.Text" xml:space="preserve">
<value>Button1</value>
</data>
Это было бы имя столкновение с текстом ресурсом имущественной формы, если он не ставил $ перед ним. Пока вы не программируете на языке, который в любом случае допускает $ в имени идентификатора. Ни один из стандартных языков VS не делает.
Еще одна деталь заключается в том, что у вас возникнут проблемы с ссылкой на эту кнопку из кода C#. Для этого есть люк-побег, вы можете использовать @this в своем коде. Префикс @ гарантирует, что компилятор не распознает его как ключевое слово, а просто простой идентификатор.
И как соответствующий ресурс (Icon) определен в файле resx? –
@HenkHolterman - Хорошо, я думаю, вы помогли мне ответить на мой собственный вопрос. Я забыл о файлах .resx (не дотрагивался до WinForms целую вечность), и есть, определяется как '$ this.Icon'. –