Каково использование / значение символа @ в именах переменных в C#?
Я обнаружил, что вы можете начинать имя переменной с символа '@' в C#. В моем проекте C# я использовал веб-службу (я добавил веб-ссылку на свой проект), которая была написана на Java. Один из объектов, интерфейса, определенных в WSDL имеет переменную-член с именем "params". Очевидно, что это зарезервированное слово в C#, поэтому вы не можете иметь класс с переменной-членом с именем "params". Созданный прокси-объект содержал свойство, которое выглядело следующим образом это:
public ArrayList @params {
get { return this.paramsField; }
set { this.paramsField = value; }
}
Я искал в документации VS 2008 c#, но не смог найти ничего об этом. Также поиск в Google не дал мне полезные ответы. Итак, каково точное значение или использование символа '@' в имени переменной/свойства?
9 ответов:
прямиком из Спецификация Языка C#,Идентификаторы (C#) :
префикс "@" позволяет использовать ключевые слова как идентификаторы, который является полезно при взаимодействии с другими алгоритмический язык. Характер @ на самом деле не является частью идентификатор, поэтому идентификатор может быть видел в других языках как обычный идентификатор, без префикса. Один идентификатор с префиксом @ называется стенограмма идентификатор.
Это просто позволяет использовать зарезервированное слово в качестве имени переменной. Не рекомендуется имхо (за исключением случаев как у вас).
в C# символ at ( @ ) используется для обозначения литералов, которые явно не соответствуют соответствующим правилам в спецификации языка.
в частности, он может использоваться для имен переменных, которые конфликтуют с зарезервированными ключевыми словами (например, вы не можете использовать params, но вместо этого вы можете использовать @params, то же самое с out/ref/любым другим ключевым словом в спецификации языка). Кроме того, он может использоваться для неэскапированных строковых литералов; это особенно актуально для констант пути, например, вместо
path = "c:\temp\somefile.txt"
можно писатьpath = @"c:\temp\somefile.txt"
. Это также очень полезно для регулярных выражений.
в отличие от сигилов Перла, an
@
префикс перед именем переменной в C# не имеет смысла. Еслиx
- это переменная,@x
- это другое название для той же переменной.> string x = "abc"; > Object.ReferenceEquals(x, @x).Dump(); True
но
@
префикс есть использовать, как вы обнаружили - Вы можете использовать его для уточнения имен переменных, которые C# в противном случае отклонит как незаконные.> string string; Identifier expected; 'string' is a keyword > string @string;
The
@
символ позволяет использовать зарезервированные ключевые слова для имени переменной. как@int
,@string
,@double
etc.например:
string @public = "Reserved Keyword used for me and its fine";
приведенный выше код работает нормально, но ниже не работает:
string public = "This will not compile";
Это просто позволяет использовать зарезервированные слова в качестве имен переменных. Я хотел var называется
event
другой день. Я собирался пойти с_event
вместо этого, но мой коллега напомнил мне, что я мог бы просто назвать это@event
вместо.
другой вариант использования-в методах расширения. Первый, специальный параметр можно выделить для обозначения его реального значения с помощью
@this
имя. Пример:public static TValue GetValueOrDefault<TKey, TValue>( this IDictionary<TKey, TValue> @this, TKey key, TValue defaultValue) { if (!@this.ContainsKey(key)) { return defaultValue; } return @this[key]; }
Если мы используем ключевое слово в качестве имени для идентификатора, мы получаем ошибку компилятора "ожидаемый идентификатор", "имя идентификатора" является ключевым словом" Чтобы устранить эту ошибку, префикс идентификатора с "@". Такие идентификаторы являются дословными идентификаторами. Символ @ на самом деле не является частью идентификатора, поэтому идентификатор может рассматриваться в других языках как обычный идентификатор без префикса