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