Каково использование / значение символа @ в именах переменных в C #? - PullRequest
282 голосов
/ 18 сентября 2008

Я обнаружил, что вы можете начать имя вашей переменной с символа '@' в C #. В моем проекте на C # я использовал веб-сервис (я добавил веб-ссылку на мой проект), который был написан на Java. Один из объектов интерфейса, определенных в WSDL, имел переменную-член с именем «params». Очевидно, это зарезервированное слово в C #, поэтому вы не можете иметь класс с переменной-членом с именем «params». Созданный прокси-объект содержал свойство, которое выглядело так:

public ArrayList @params {
    get { return this.paramsField; }
    set { this.paramsField = value; }
}

Я искал документацию по VS 2008 c #, но ничего не смог найти. Также поиск в Google не дал мне никаких полезных ответов. Так, каково точное значение или использование символа '@' в имени переменной / свойства?

Ответы [ 9 ]

289 голосов
/ 18 сентября 2008

Прямо из спецификации языка C # , Идентификаторы (C #) :

Префикс "@" позволяет использовать ключевые слова в качестве идентификаторов, который является полезно при взаимодействии с другими языки программирования. Характер @ на самом деле не является частью идентификатор, поэтому идентификатор может быть рассматривается на других языках как нормальный идентификатор, без префикса. Идентификатор с префиксом @ называется дословный идентификатор.

70 голосов
/ 18 сентября 2008

Позволяет использовать зарезервированное слово в качестве имени переменной. Не рекомендуется ИМХО (за исключением случаев, как у вас).

35 голосов
/ 18 сентября 2008

В C # символ at (@) используется для обозначения литералов, которые явно не придерживаются соответствующих правил в спецификации языка.

В частности, его можно использовать для имен переменных, которые конфликтуют с зарезервированными ключевыми словами (например, вы не можете использовать params, но вместо этого можете использовать @params, то же самое с out / ref / любым другим ключевым словом в спецификации языка). Кроме того, он может использоваться для неэкранированных строковых литералов; это особенно актуально для констант пути, например, вместо path = "c:\\temp\\somefile.txt" вы можете написать path = @"c:\temp\somefile.txt". Это также очень полезно для регулярных выражений.

12 голосов
/ 15 февраля 2013

В отличие от сигил Perl, префикс @ перед именем переменной в C # не имеет значения. Если x - переменная, @x - другое имя для той же переменной.

> string x = "abc";
> Object.ReferenceEquals(x, @x).Dump();
True

Но у префикса @ есть использование , как вы обнаружили - вы можете использовать его для уточнения имен переменных, которые C # иначе отклонил бы как недопустимые.

> string string;
Identifier expected; 'string' is a keyword

> string @string;
8 голосов
/ 03 апреля 2014

Символ @ позволяет использовать зарезервированные ключевые слова для имени переменной. как @int, @string, @double и т. д.

Например:

string @public = "Reserved Keyword used for me and its fine";

Приведенный выше код работает нормально, но ниже не будет работать:

string public = "This will not compile";
4 голосов
/ 18 сентября 2008

Это просто позволяет вам использовать зарезервированные слова в качестве имен переменных. Я хотел вар под названием event на днях. Вместо этого я собирался перейти с _event, но мой коллега напомнил мне, что я могу просто назвать его @event.

2 голосов
/ 03 декабря 2013

Другой вариант использования в методах расширения. Первый, специальный параметр можно различить, чтобы обозначить его реальное значение именем @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];
    }
1 голос
/ 15 февраля 2014

Вы можете использовать его, чтобы использовать зарезервированные ключевые слова в качестве имени переменной, например

 int @int = 3; 

компилятор игнорирует @ и компилирует переменную как int

не принято использовать мысли

1 голос
/ 24 февраля 2009

Если мы используем ключевое слово в качестве имени для идентификатора, мы получаем ошибку компилятора «идентификатор ожидается,« Имя идентификатора »- это ключевое слово» Чтобы преодолеть эту ошибку, префикс идентификатора с «@». Такие идентификаторы являются дословными идентификаторами. Символ @ на самом деле не является частью идентификатора, поэтому идентификатор может рассматриваться на других языках как обычный идентификатор без префикса

...