Каково использование / значение символа @ в именах переменных в 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"
, Это также очень полезно для регулярных выражений.
В отличие от символов Perl, @
Префикс перед именем переменной в C# не имеет смысла. Если x
переменная, @x
другое имя для той же переменной.
> string x = "abc";
> Object.ReferenceEquals(x, @x).Dump();
True
Но @
Как вы обнаружили, у префикса есть применение- вы можете использовать его для уточнения имен переменных, которые C# в противном случае отклонил бы как недопустимые.
> string string;
Identifier expected; 'string' is a keyword
> string @string;
@
Символ позволяет использовать зарезервированные ключевые слова для имени переменной. лайк @int
, @string
, @double
и т.п.
Например:
string @public = "Reserved Keyword used for me and its fine";
Приведенный выше код работает нормально, но ниже не будет работать:
string public = "This will not compile";
Это просто позволяет вам использовать зарезервированные слова в качестве имен переменных. Я хотел вар под названием 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];
}
Если мы используем ключевое слово в качестве имени для идентификатора, мы получим ошибку компилятора "идентификатор ожидается," Имя идентификатора "является ключевым словом". Чтобы преодолеть эту ошибку, добавьте перед идентификатором "@". Такие идентификаторы являются дословными идентификаторами. Символ @ на самом деле не является частью идентификатора, поэтому идентификатор может рассматриваться на других языках как обычный идентификатор без префикса
Вы можете использовать его, чтобы использовать зарезервированные ключевые слова в качестве имени переменной, как
int @int = 3;
компилятор игнорирует @
и скомпилировать переменную как int
не принято использовать мысли