Какое использование/значение символа @в именах переменных в С#?

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

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

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

264
18 сент. '08 в 14:44
источник поделиться
9 ответов

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

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

277
18 сент. '08 в 15:24
источник

Связанные вопросы


Похожие вопросы

Он просто позволяет использовать зарезервированное слово в качестве имени переменной. Не рекомендуется IMHO (кроме случаев, подобных вам).

62
18 сент. '08 в 14:45
источник

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

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

30
18 сент. '08 в 15:01
источник

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

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

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

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

> string @string;
12
15 февр. '13 в 13:58
источник

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

Например:

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

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

string public = "This will not compile";
7
03 апр. '14 в 15:48
источник

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

4
18 сент. '08 в 14:46
источник

Другой вариант использования - в методах расширения. Первый особый параметр можно отличить от его реального значения с помощью @this name. Пример:

public static TValue GetValueOrDefault<TKey, TValue>(
    this IDictionary<TKey, TValue> @this,
    TKey key,
    TValue defaultValue)
    {
        if (!@this.ContainsKey(key))
        {
            return defaultValue;
        }

        return @this[key];
    }
2
03 дек. '13 в 20:43
источник

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

1
24 февр. '09 в 10:06
источник

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

 int @int = 3; 

компилятор будет игнорировать @ и скомпилировать переменную как int

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

1
15 февр. '14 в 17:26
источник

Посмотрите другие вопросы по меткам или Задайте вопрос