Каково использование / значение символа @ в именах переменных в C #?
-
01-07-2019 - |
Вопрос
Я обнаружил, что в C # вы можете начинать имя своей переменной с символа "@".В моем проекте на C # я использовал веб-сервис (я добавил веб-ссылку на свой проект), который был написан на Java.Один из объектов интерфейса, определенных в WSDL, имел переменную-член с именем "params".Очевидно, что это зарезервированное слово в C #, поэтому у вас не может быть класса с переменной-членом с именем "params".Сгенерированный прокси-объект содержал свойство, которое выглядело следующим образом:
public ArrayList @params {
get { return this.paramsField; }
set { this.paramsField = value; }
}
Я просмотрел документацию по VS 2008 c #, но ничего не смог найти по этому поводу.Кроме того, поиск в Google не дал мне никаких полезных ответов.Итак, каково точное значение или использование символа "@" в имени переменной / свойства?
Решение
Прямо из Спецификация языка C #, Идентификаторы (C#) :
Префикс "@" позволяет использовать ключевые слова в качестве идентификаторов, что полезно при взаимодействии с другими языками программирования.Символ @ на самом деле не является частью идентификатора, поэтому идентификатор может рассматриваться на других языках как обычный идентификатор без префикса. Идентификатор с префиксом @ называется дословным идентификатором.
Другие советы
Это просто позволяет вам использовать зарезервированное слово в качестве имени переменной.Не рекомендуется, ИМХО (за исключением случаев, подобных вашему).
В C # символ at (@) используется для обозначения литералов, которые явно не соответствуют соответствующим правилам в спецификации языка.
В частности, он может использоваться для имен переменных, которые конфликтуют с зарезервированными ключевыми словами (напримервы не можете использовать параметры, но вместо этого вы можете использовать @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;
Тот Самый @
symbol позволяет использовать зарезервированные ключевые слова для имени переменной.Нравится @int
, @string
, @double
и т.д.
Например:
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];
}
Если мы используем ключевое слово в качестве имени идентификатора, мы получаем ошибку компилятора “ожидается идентификатор, ‘Имя идентификатора’ является ключевым словом” Чтобы преодолеть эту ошибку, префикс идентификатора равен “@”.Такие идентификаторы являются дословными идентификаторами.Символ @ на самом деле не является частью идентификатора, поэтому идентификатор может рассматриваться в других языках как обычный идентификатор без префикса
Вы можете использовать его, чтобы использовать зарезервированные ключевые слова в качестве имени переменной, например
int @int = 3;
компилятор будет игнорировать @
и скомпилируйте переменную как int
использовать мысль - это не обычная практика